promise实现原理(五)promise.allSettled与promise.any
###promise原理系列目录:
promise实现原理(四)promise.all与promise.race
promise实现原理(五)promise.allSettled与promise.any
promise实现原理(六)promise.resolve与promise.reject
还缺失的内容↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓1
2
3
4
5
6
7
8
9
10//标准提到,一个promise只有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)//已完成
Promise.prototype.then(); //已完成
Promise.prototype.catch(); //已完成
Promise.prototype.finally(); //已完成
Promise.all(); //已完成
Promise.race(); //已完成
Promise.allSettled();
Promise.any();
Promise.resolve();
Promise.reject();
#Promise.allSettled()
据官方文档所知:
此方法与Promise.all相似,只是,Promise.all会有两个状态,成功/失败,而Promise.allSettled只会有一个完成状态,即,无论子Promise是否成功,均会调用.then参数的第一个方法
Promise.allSettled([p1,p2,p3])
Promise.allSettled应传入一个数组,数组对象均为Promise对象,当Promise.all中,所有的promise对象均出现结果后才会执行.allSettled中的.then回调,返回的数组为三个对象,我们尝试写一下
1 | myPromise.allSettled = function(promiseArr=[]){ |
按照原理,每一个子promise进行resolve后,都会判断是否已完成了所有的promise,已完成则返回一个新的resolve状态的Promise,来完成接下来应该.then的事情
这样就完成了Promise.all的功能了
#Promise.any()
据官方文档所知:
Promise.any()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。子Promise中任意一个Promise完成时,就触发.then,成功触发.then中第一个方法,失败触发.then中第二个方法
同样的,在.all方法中,修改一下执行.then的条件即可
1 | myPromise.any = function(promiseArr=[]) { |
这样就完成了Promise.any的功能了,但是此功能是提案中,经测试,现在的chrome里并不能支持此项,如果需要使用,可以copy上方代码,到项目中使用此功能
截止此张,已完成了Promise方法中一半功能的原理了
原文作者: IT梅
原文链接: http://www.meixiaohan.com/2019/07/10/promise实现原理(五)promise.allSettled与promise.any/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)