了解 ES8 中新增的 Promise.prototype.finally() 方法

阅读时长 4 分钟读完

在 ES8 中,Promise 增加了一个新的方法 finally(),该方法在 Promise 执行结束后无论成功或失败都会执行。

什么是 Promise

Promise 是一种 JavaScript 对象,用于异步计算。它代表了一个尚未完成但最终将会完成的操作,并可以使用链式语法进行操作。Promise 有三种状态:pending(等待中)、fulfilled(已成功)和 rejected(已失败)。

Promise.prototype.finally() 方法

Promise.prototype.finally() 方法返回一个 Promise,在 Promise 执行结束后无论成功或失败都会执行指定的回调函数。该方法接受一个回调函数作为参数,该回调函数会在 Promise 执行结束后执行,无论 Promise 是否成功或失败。

语法

参数

  • onFinally:一个回调函数,在 Promise 执行结束后执行,无论成功或失败。该回调函数不接受任何参数。

返回值

返回一个 Promise 对象,该 Promise 对象的状态和值与原 Promise 对象保持一致。

示例代码

-- -------------------- ---- -------
----- ------- - --- ----------------- ------- -- -
  ------------- -- -
    --------------
  -- ------
---

-------
  ------------ -- -
    --------------------
  --
  ------------ -- -
    -------------------
  --
  ----------- -- -
    -------------------- -------
  ---
展开代码

在上面的代码中,我们创建了一个 Promise 对象,该 Promise 对象会在 1 秒后返回一个成功的结果。然后我们使用 then() 方法处理成功的结果,并使用 catch() 方法处理失败的结果。最后使用 finally() 方法在 Promise 执行结束后输出一条信息。

深度解析

Promise.prototype.finally() 方法的实现思路很简单,就是在 Promise 对象的 then() 或 catch() 方法后面再接一个 then() 方法,该 then() 方法不接受任何参数,只是在其内部执行回调函数。由于 then() 方法会返回一个新的 Promise 对象,因此通过在 then() 方法后面再接一个 then() 方法,就可以实现在 Promise 执行结束后执行回调函数的目的。

在上面的代码中,我们使用 Promise.resolve() 方法将回调函数包装成一个 Promise 对象,并在 then() 方法中执行该 Promise 对象。由于 Promise.resolve() 方法会返回一个新的 Promise 对象,因此该 then() 方法也会返回一个新的 Promise 对象。在 then() 方法中,如果原 Promise 对象成功,则执行回调函数并返回原 Promise 对象的结果,否则执行回调函数并抛出原 Promise 对象的错误。

学习和指导意义

Promise.prototype.finally() 方法的出现,使得 Promise 对象的处理更加完善和方便。在 Promise 执行结束后,我们通常会执行一些善后工作,例如关闭文件、释放资源等。使用 Promise.prototype.finally() 方法可以使得这些善后工作更加简单和可靠。

除了 Promise.prototype.finally() 方法,ES8 还新增了一些其他的 Promise 方法,例如 Promise.allSettled()、Promise.any()、Promise.try() 等。这些方法都可以提高 Promise 对象的处理效率和可靠性,值得我们深入学习和掌握。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d16391a941bf71342f50e4

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试