frontEnd_book
frontEnd_book copied to clipboard
模拟实现一个 Promise.finally
首先要理解finally定义:
finally() 方法返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式。-来自MDN
Promise.prototype.finally = function (callback) {
let P = this.constructor;
return this.then(
value => P.resolve(callback()).then(() => value),
reason => P.resolve(callback()).then(() => { throw reason })
);
};
注意:这里先通过P缓存this.constructor,获取当前Promise实例对象,而P.resolve是针对直接返回值,没有经过异步处理情况,例如return 1,所以用P.resolve包一层处理。