参见英文答案 > ES6 promise settled callback? 7个
Bluebird提供了一种finally
方法,无论您的承诺链中发生什么,都会被调用.我发现它非常方便用于清洁目的(比如解锁资源,隐藏装载机……)
在ES6原生承诺中是否存在等价物?
解决方法:
截至2018年2月7日
Chrome 63,Firefox 58和Opera 50支持Promise.finally
.
在Node.js 8.1.4(V8 5.8)中,该功能位于标志--harmony-promise-finally
后面.
Promise.prototype.finally ECMAScript Proposal目前处于TC39流程的stage 3.
同时在所有浏览器中都有承诺.最终功能;你可以在catch()之后添加一个额外的then()来始终调用该回调.
例:
myES6Promise.then(() => console.log('Resolved'))
.catch(() => console.log('Failed'))
.then(() => console.log('Always run this'));
JSFiddle演示:https://jsfiddle.net/9frfjcsg/
或者你可以扩展原型以包含finally()方法(不推荐):
Promise.prototype.finally = function(cb) {
const res = () => this;
const fin = () => Promise.resolve(cb()).then(res);
return this.then(fin, fin);
};
JSFiddle演示:https://jsfiddle.net/c67a6ss0/1/
还有Promise.prototype.finally垫片库.