Promise finally 怎么实现的?
Promise.finally()
方法是在 ES2018 中引入的,用于指定不管 Promise 状态如何都要执行的回调函数。与 Promise.then()
和 Promise.catch()
不同的是, Promise.finally()
方法不管 Promise 是成功还是失败都会执行回调函数,而且不会改变 Promise 的状态。如果返回的值是一个 Promise,那么 Promise.finally()
方法会等待该 Promise 执行完毕后再继续执行。
Promise.finally()
方法的实现思路如下:
Promise.finally()
方法接收一个回调函数作为参数,返回一个新的 Promise 实例。- 在新的 Promise 实例的
then()
方法中,首先调用原 Promise 的then()
方法,将原 Promise 的结果传递给下一个then()
方法。 - 在新的 Promise 实例的
then()
方法中,调用回调函数并将原 Promise 的结果传递给回调函数。 - 如果回调函数返回一个 Promise,则需要在新的 Promise 实例的
then()
方法中等待该 Promise 执行完毕,再将结果传递给下一个then()
方法。 - 在新的 Promise 实例的
finally()
方法中,返回一个新的 Promise 实例。
下面是一个简单的实现示例:
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 }) ); }
这个实现方法中,使用了 Promise.resolve()
来返回一个新的 Promise 实例,因此可以避免了 Promise 链的状态改变。另外,由于 finally()
方法只是在 Promise 链的最后执行回调函数,因此不需要使用异步函数。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论