Promise的finally并不是终结

开发时常常遇到一串Promise.then最后执行一个固定逻辑,显而易见要使用finally。日后需求扩展,需要在这段固定逻辑之后添加另外的异步逻辑——又想加一串then回调,这时候直接在finally之后调then是不是觉得心里发虚?但是又不愿意去将原本的调用链改变,多麻烦啊。仔细查看文档发现其实是可以的,Promise设计早就想到了,文档描述如下:

Promise.prototype.finally(onFinally)

添加一个事件处理回调于当前promise对象,并且在原promise对象解析完毕后,返回一个新的promise对象。回调会在当前promise运行完毕后被调用,无论当前promise的状态是完成(fulfilled)还是失败(rejected)。

finally方法和then以及catch一样,都可以返回一个新的Promise,只是细节上有点区别,finally返回的Promise将以finally之前的then的返回值来resolve(进入fulfilled状态),有点绕口,看看代码示例就清楚了:

new Promise(function(resolve,reject){
    resolve(1)
}).finally(function(data){
    console.log(data)
    return 3
}).then(function(x){
    console.log(x)
})

输出:
undefined
1

可见finally并不会影响之前返回的Promise对象,之后还能照常调用then并且获取之前Promise的值(这里是1)。

发布了71 篇原创文章 · 获赞 31 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/m0_37828249/article/details/103819555