3.ES6的Promise对象

文章介绍了Promise的基本概念和用法,包括Promise的三种状态(pending、fulfilled、rejected)及其转换规则,以及then()、catch()方法的使用。此外,还详细讲解了Promise.all()和Promise.race()这两个方法的特性,前者在所有实例成功后才返回,后者则在任一实例状态改变时立即返回。
摘要由CSDN通过智能技术生成

    // Promise基本用法

    let pro1 = new Promise(function (resole, reject) { })

    // Promise对象是全局对象.其中有两个参数:resolve(解决)和reject(拒绝),两个函数均为方法。resolve方法用于处理异步操作成功后业务;reject方法用于操作异步操作失败后的业务。

    // (3)、Promise的三种状态.状态只能从 初始化 -> 成功  或者  初始化 -> 失败,不能逆向转换,也不能在成功fulfilled 和失败rejected之间转换。

    // 1.pending:刚刚创建一个Promise实例的时候,表示初始状态;

    // 2.fulfilled:resolve方法调用的时候,表示操作成功;

    // 3.rejected:reject方法调用的时候,表示操作失败;

    let pro = new Promise(function (resolve, reject) {

        //实例化后状态:pending

        if ('操作成功') {

            resolve();//resolve方法调用,状态为:fulfilled          

        } else {

            reject();//reject方法调用,状态为:rejected

        }

    });

    //初始化实例后,对象的状态就变成了pending;当resolve方法被调用的时候,状态就变成了:成功fulfilled;当reject方法被调用的时候,状态就会有pending变成失败rejected。

    // then()方法:用于绑定处理操作后的处理程序。参数是两个函数,第一个用于处理操作成功后的业务,第二个用于处理操作异常后的业务。

    pro.then(function (res) {

        //chonggong后执行

    }, function (error) {

        //shibai后执行

    })

    // 对于操作异常的程序,Promise专门提供了一个实例方法来处理:catch ( )方法。

    pro.catch(function (error) {

        //shibai后执行

    })//catch只接受一个参数,用于处理操作异常后的业务。

    // 大神写法

    pro.then(function (res) {

        //chonggong后执行

    }).catch(function (error) {

        //shibai后执行

    })

    // 案例

    let pro2 = new Promise(function (resolve, reject) {

        if (true) {

            resolve('成功')

        } else {

            reject('shibai')

        }

    })

    pro2.then(requestA).then(requestB).then(requestC).catch(requestError)

    function requestA() {

        console.log('请求A成功');//请求A成功

        return '请求B,下一个就是你了';

    }

    function requestB(res) {

        console.log('上一步的结果:' + res);//上一步的结果:请求B,下一个就是你了

        console.log('请求B成功');//请求B成功

        return '请求C,下一个就是你了';

    }

    function requestC(res) {

        console.log('上一步的结果:' + res);//上一步的结果:请求C,下一个就是你了

        console.log('请求C成功');//请求C成功

    }

    function requestError() {

        console.log('请求失败');

    }

    // Promise.all()方法:接受一个数组作为参数,数组的元素是Promise实例对象,当参数中的实例对象的状态都为fulfilled时,Promise.all()才会有返回。

    let pro3 = new Promise(function (resolve) {

        setTimeout(function () {

            resolve('实例1操作成功');

        }, 5000);

    });


 

    let pro4 = new Promise(function (resolve) {

        setTimeout(function () {

            resolve('实例2操作成功');

        }, 1000);

    });


 

    Promise.all([pro3, pro4]).then(function (result) {

        console.log(result);//(2) ['实例1操作成功', '实例2操作成功']

    });

    // Promise.race()方法:它的参数要求跟Promise.all()方法一样,不同的是,它参数中的promise实例,只要有一个状态发生变化(不管是成功fulfilled还是异常rejected),它就会有返回,其他实例中再发生变化,它也不管了。

    let pro5 = new Promise(function (resolve) {

        setTimeout(function () {

            resolve('实例1操作成功');

        }, 4000);

    });

    //初始化实例pro2

    let pro6 = new Promise(function (resolve, reject) {

        setTimeout(function () {

            reject('实例2操作失败');

        }, 2000);

    });

    Promise.race([pro5, pro6]).then(function (result) {

        console.log(result);

    }).catch(function (error) {

        console.log(error);//实例2操作失败

    });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值