promise实现原理(三)promise.finally
###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.prototype.finally()
据官方文档所知:
finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。
可以理解为,Promise中,无论任何状态,执行毁掉之后,都会执行finally方法,我们稍微修改一下上一期的方法中
myPromise中的doCallback方法,判断一下,如果没有传入.reject则调用.catch方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20self.doCallback=function(){//执行回调函数
let callBackArr = []
if(self.status == 'resolved'){//取构造函数中保存的data,传入callback方法里
callBackArr = self.callbackObj.resolveCallback;
}else if(self.status == 'rejected'){
if(self.callbackObj.rejectCallBack[0]){
callBackArr = self.callbackObj.rejectCallBack;
}else{
callBackArr = [self.callbackObj.catchCallBack];
}
}
if(callBackArr&&callBackArr.length>0){
callBackArr.forEach((item)=>{
item(self.data)
})
}
if(self.callbackObj.finallyCallback){
self.callbackObj.finallyCallback()
}
}
还需要为myPromise来补一个finally的回调
1 | myPromise.prototype.finally=function(finallyCallback){ |
现在我们发现.finally方法已经可以正式调通了1
2
3
4
5
6
7new myPromise((resolve,reject)=>{
reject('reject')
}).catch((data)=>{
console.log(data,'catch');//reject,catch
}).finally((data)=>{
console.log(data,'finally');//reject,catch
})
如此,我们便完成了.finally回调啦
原文作者: IT梅
原文链接: http://www.meixiaohan.com/2019/07/03/promise实现原理(三)promise.finally/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)