Bluebird 提供了一个 finally方法,无论承诺链中发生什么,它都会被调用。我发现它对于清理目的非常方便(比如解锁资源、隐藏加载程序...)
finally
ES6本机承诺中是否存在类似的内容?
2018年2月7日
Chrome 63 + 、 Firefox 58 + 和 Opera 50 + 都支持 Promise.finally。
Promise.finally
在 Node.js 8.1.4 + (V85.8 +)中,该特性可以在标志 --harmony-promise-finally后面使用。
--harmony-promise-finally
承诺,原型,最终 ECMAScript 提案目前位于 TC39进程的 第三阶段中。
与此同时,在所有浏览器中都具有 nose.finally 功能; 您可以在 ABC1之后添加一个额外的 then()来始终调用该回调。
then()
例如:
myES6Promise.then(() => console.log('Resolved')) .catch(() => console.log('Failed')) .then(() => console.log('Always run this'));
JSFiddle 演示: https://jsfiddle.net/9frfjcsg/
或者您可以扩展原型以包含 finally()方法(不推荐) :
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/
还有 承诺,原型,终于垫片库。