在原生ES6承诺中,Bluebird Promise.finally的等价物是什么?
2022-08-30 02:29:31
截至2018年2月7日
Chrome 63+、Firefox 58+和Opera 50+支持Promise.finally
。
在 Node.js 8.1.4+ (V8 5.8+) 中,该功能位于标志 --harmony-promise-finally
后面。
Promise.prototype.final 最后 ECMAScript 提案目前处于 TC39 流程的第 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.finaling shim库。