微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 在本机ES6承诺中,Bluebird Promise.IIally的等价物是什么?

参见英文答案 > 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垫片库.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐