ES6Promise概念及其用法

目录

一、什么是Promise

二、Promise三种状态

三、Promise语法

四、Promise的实例方法

五、Promise的静态方法


Promise是ES6推出的一个完美的异步解决方案,它支持链式调用,避免回调地狱。

一、什么是Promise

        Promise是一个对象或者是构造函数,用来封装异步操作并获得成功或失败的结果。

二、Promise三种状态

        pending:等待状态(初始状态)

        fulfilled/resolved:成功状态

        rejected:失败状态

Promise状态只能由pending变为fulfilled/resolved,以及pending变为rejected。

三、Promise语法

Promise是一个构造函数,它的参数是一个回调函数,这个回调函数有两个参数:

        resolve:修改成功状态的方法。

        reject:修改失败状态的方法

new Promise((resolve, reject) => {
            console.log('new Promise同步代码');
            if (Math.random() > 0.5) {
                resolve('改为修改状态')
            } else {
                reject('改为失败状态')
            }
        })

四、Promise的实例方法

1.then():有两个回调函数作为参数,分别是成功的回调和失败的回调(不常用)

new Promise((resolve, reject) => {
            console.log('new Promise同步代码');
            setTimeout(() => {//模拟异步ajax操作
                if (Math.random() > 0.5) {
                    resolve('改为修改状态')
                } else {
                    reject('改为失败状态')
                }
            }, 1000)
        })
        .then(res=>{
                console.log('then方法的第一个回调接收resolve的参数',res);
                return '返回的参数' 
            },err=>{
                //then方法的第二个回调函数用来接收reject传来的参数,这种写法不多见,一般用catch方法
                console.log('then方法的第二个回调接收resolve的参数',err);
            })

2.catch():方法用来捕获reject方法传来的参数

new Promise((resolve, reject) => {
            console.log('new Promise同步代码');
            setTimeout(() => {//模拟异步ajax操作
                if (Math.random() > 0.5) {
                    resolve('改为修改状态')
                } else {
                    reject('改为失败状态')
                }
            }, 1000)
        })
        .then(res => {
                console.log('then方法的第一个回调接收resolve的参数', res);
            })
        .catch(err => {
                console.log('使用catch方法捕获reject方法传过来的参数', err);
            })

3.finally():无论成功还是失败,最后一定会执行的方法

new Promise((resolve, reject) => {
            console.log('new Promise同步代码');
            setTimeout(() => {//模拟异步ajax操作
                if (Math.random() > 0.5) {
                    resolve('改为修改状态')
                } else {
                    reject('改为失败状态')
                }
            }, 1000)
        })
        .then(res => {
                console.log('then方法的第一个回调接收resolve的参数', res);
            })
        .catch(err => {
                console.log('使用catch方法捕获reject方法传过来的参数', err);
            })
        .finally(() => {
                console.log('无论成功还是失败最后一定会执行');
            })

五、Promise的静态方法

1.Promise.all():处理异步任务的并发场景,全部成功才能成功,有一个失败则返回失败结果

function fn1(num) {
            var p = new Promise((resolved, reject) => {
                setTimeout(() => {
                    resolved('fn1异步的结果:' + num)
                }, 50)
            })
            return p
        }
function fn2(num) {
            var p = new Promise((resolved, reject) => {
                setTimeout(() => {
                    resolved('fn2异步的结果:' + num)
                    // reject('fn2异步的结果:' + num) //有一个失败
                }, 50)
            })
            return p
        }
function fn3(num) {
            var p = new Promise((resolved, reject) => {
                setTimeout(() => {
                    resolved('fn3异步的结果:' + num)
                }, 50)
            })
            return p
        }
        Promise.all([fn1(1), fn2(2), fn3(3)]).then(res => {
            console.log('res:' + res);//全部成功返回res:fn1异步的结果:1,fn2异步的结果:2,fn3异步的结果:3

        }).catch(err=>{
            console.log('err:'+err);//一个失败则返回err:fn2异步的结果:2
        })

2.Promise.race():并发处理多个异步任务,只要有一个任务完成就能获得到结果(all方法的补充)

function fn1(num) {
            var p = new Promise((resolved, reject) => {
                setTimeout(() => {
                    resolved('fn1异步的结果:' + num)
                }, 2000)
            })
            return p
        }
function fn2(num) {
            var p = new Promise((resolved, reject) => {
                setTimeout(() => {
                    resolved('fn2异步的结果:' + num)
                }, 1000)
            })
            return p
        }
        Promise.race([fn1(1), fn2(2)]).then(res => {
            console.log('res:' + res); //res:fn2异步的结果:2
        })

3.Promise.any():并发处理多个异步任务,只要有一个任务执行成功就得到结果(all方法的补充)

function fn1(num) {
            var p = new Promise((resolved, reject) => {
                setTimeout(() => {
                    resolved('fn1异步的结果:' + num)
                }, 2000)
            })
            return p
        }
function fn2(num) {
            var p = new Promise((resolved, reject) => {
                setTimeout(() => {
                    resolved('fn2异步的结果:' + num)
                }, 1000)
            })
            return p
        }
        Promise.any([fn1(1), fn2(2)]).then(res => {
            console.log('res:' + res); //res:fn2异步的结果:2
        })

4.Promise.resolve():方法将现有对象转为fulfilled/resolved 状态的Promise对象

var p1=new Promise((resolve,reject)=>{
            resolve('成功')
            reject('失败')
        })
        Promise.resolve(p1).then(res => {
            console.log('res:' + res); //成功
        })

5.Promise.reject():方法将现有对象转为rejected 状态的Promise对象

var p1=new Promise((resolve,reject)=>{
            resolve('成功')
            reject('失败')
        })
        Promise.reject(p1).catch(err=>{
            console.log('err:' + err);
        })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值