在本地 ES6承诺中,蓝鸟的承诺最终等价于什么?

Bluebird 提供了一个 finally方法,无论承诺链中发生什么,它都会被调用。我发现它对于清理目的非常方便(比如解锁资源、隐藏加载程序...)

ES6本机承诺中是否存在类似的内容?

45379 次浏览

2018年2月7日

Chrome 63 + 、 Firefox 58 + 和 Opera 50 + 都支持 Promise.finally

在 Node.js 8.1.4 + (V85.8 +)中,该特性可以在标志 --harmony-promise-finally后面使用。

承诺,原型,最终 ECMAScript 提案目前位于 TC39进程的 第三阶段中。

与此同时,在所有浏览器中都具有 nose.finally 功能; 您可以在 ABC1之后添加一个额外的 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/

还有 承诺,原型,终于垫片库。