在 ES9 中,Promise 对象增加了一个新的方法:.finally()
。该方法能够在 Promise 调用结束后,无论是 resolve 还是 reject,都会执行传入的函数,即无论成功与否,都会执行。本文将深入解析 ES9 中的 .finally()
方法的用法和实现,并通过示例代码帮助读者更好地理解这个方法。
语法
.finally()
方法的语法如下:
promiseObject.finally(onFinally)
其中,promiseObject
表示需要调用 .finally()
方法的 Promise 实例对象,onFinally
则是需要执行的回调函数。
用法
.finally()
方法可以在 Promise 调用结束后,无论成功或失败,执行传入的回调函数。该方法无需传入参数,返回值为一个新的 Promise 实例,该实例可以继续链式调用。
-- -------------------- ---- ------- ------------------------ -------------------------- -------- -- - -------------------- ----------- -- --------- -- - -------------------- ---------- -- ----------- -- - -------------------- ---
执行结果为:
start... resolve success! end!
实现
在实现 .finally()
方法的时候,需要注意的是当该方法被调用时,返回一个新的 Promise 实例。该实例会在原有的 Promise 实例 resolve 或 reject 后执行回调函数。
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 }) ); };
总结
.finally()
方法是 Promise 中比较实用的方法之一,它可以帮助开发者在 Promise 调用完成后,执行一些与状态无关的代码。本文深入解析了 ES9 中的 .finally()
方法的用法和实现,帮助读者更好地掌握这个方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64876b7548841e989461354c