promise构造函数

最早,promise是在社区提出和实现的,后来es6就将其写进了语言标准,统一了用法。所以大家有兴趣可以尝试自己内部实现一个promise构造函数加深对此api的理解。

首先promise内部有3种状态,pending,fulfilled,rejected,一开始是pending,当异步程序有结果时就会转化成成功或者失败,当状态改变,再次调用promise方法时,就会直接输出上次的结果。

promise有3个方法,then,catch,finally,then方法用来接收成功回调,内部实现了链式调用,可return 回一个值,被下一个then方法接收到,then方法可以接受两个回调函数作为参数,第一个参数是成功回调,第二个是失败回调。catch方法接收错误回调,没有实现链式调用,只执行一次。finally方法,无论失败成功都会执行这个方法,回调函数不接受任何参数。

当Apromise 返回Bpromise对象时,要求是B的异步函数要比A慢,最后状态由A.B共同控制,除非双成功,是成功,其他情况都是失败。

Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个catch语句捕获。catch能捕获到then方法里面的错误。

构造函数自带的方法:

            A:all(),接收一系列的promise对象,只有都成功时才返回true,其他都是false。如传进来的不是promise对象,会调用promise.resolve()方法,将其转为promise对象。如果作为参数的 Promise 实例,自己定义了catch方法,那么它一旦被rejected,并不会触发Promise.all()catch方法。意思是说,自己定义了catch方法,会导致all()方法的catch捕获不到而执行then方法。

            B:race()方法,和all方法相反,有一个为真就返回结果。

            C:resolve():将现有对象转为 Promise 对象:分4种情况

                    1:接收另一个promise对象,返回其本身。

                    2参数是一个带有then()方法的对象:将这个对象转为 Promise 对象,然后就立即执行thenable对象的then方法。

                    3参数不是带有then方法的对象,则会马上执行并且返回该值。

                    4没有任何参数:直接返回一个resolved状态的 Promise 对象。

                立即resolve的 Promise 对象,是在本轮“事件循环”(event loop)的结束时,而不是在下一轮“事件循环”的开始时。因为执行的是then方法。

                    5Promise.try:用来接收promise操作发生的错误,Node进程中也有‘rejectionHandled’事件来接收promise传出来的错误

转载于:https://my.oschina.net/u/3971746/blog/3000597

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值