什么是Bluebird Promise.finally在本机ES6承诺中的等价物?

时间:2016-03-14 22:10:42

标签: javascript promise bluebird

Bluebird提供了一个finally方法,无论您的保证链中发生什么,都会被调用。我发现它非常方便用于清洁目的(比如解锁资源,隐藏装载机......)

ES6原生承诺中是否存在相应的内容?

1 个答案:

答案 0 :(得分:267)

截至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

同时拥有promise.finally功能在所有浏览器中; 您可以在then()之后添加额外的catch()以始终调用该回调

示例:

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垫片库。