首页 > 解决方案 > 接收参数的 JavaScript Promise.prototype.finally()

问题描述

为什么Promise.prototype.finally()不接收任何参数?

文档说:

finally 回调不会收到任何参数,因为没有可靠的方法来确定承诺是否被履行或拒绝。这个用例正好是在你不关心拒绝原因或履行价值的时候,所以没有必要提供它

但是,我可以在 Promise 原型中添加一个简单的方法,将其命名为finally2 ( Promise.prototype.finally2),它可以接收结果,并且可以可靠地确定 promise 是否被履行或拒绝。

Promise.prototype.finally2 = function(callback){
    return this.then(result => callback(result), result => callback(undefined, result));
}

我理解(如文档所述)用例Promise.prototype.finally正是当您不关心拒绝原因或履行价值时。

我的问题是:如何确定承诺是在 中实现还是被拒绝是不可靠的Promise.prototype.finally

Promise.prototype.finally2 = function(callback){
	return this.then(result => callback(result), result => callback(undefined, result));
}

Promise.resolve(2).finally((...args) => console.log('finally:resolve =>', args));
Promise.reject(2).finally((...args) => console.log('finally:reject =>', args));

Promise.resolve(2).finally2((...args) => console.log('finally2:resolve =>', args));
Promise.reject(2).finally2((...args) => console.log('finally2:reject =>', args));

标签: javascriptnode.jspromisetry-catch-finally

解决方案


推荐阅读