JavaScript 异步编程新特性:ES9 中的 Promise.finally()

阅读时长 3 分钟读完

什么是 Promise.finally()?

Promise.finally() 是 ES9 中新增的 Promise 方法。该方法为 Promise 实例新增了一个 finally() 方法,返回一个新的 Promise 对象。

Promise.finally() 方法接受一个函数作为参数,不论 Promise 状态是 fulfilled 还是 rejected,该函数都会被执行。finally() 方法的回调函数接受一个参数,即前一个 Promise 的结果。该方法返回一个新的 Promise 对象,可以继续链式调用 then() 或 catch()。

为什么需要 Promise.finally()?

在 Promise 异步编程中,finally() 方法用于确保无论 Promise 状态如何,都能执行一些代码。通过 finally() 方法,可以把重复代码的逻辑抽离出来,避免代码冗余。可以使用 finally() 即时释放资源,比如关闭数据库连接、请求超时等。

以前,JavaScript 开发人员通常使用 then() 和 catch() 方法链式调用 Promise。但是这种做法存在一些问题。当我们想要在 then() 操作之后进行一些清理操作时,只能在 then() 内重复代码。例如:

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

上面的代码中,在成功或失败的情况下,都需要执行一些清理操作。如果不使用 finally(),只能在 then() 或 catch() 方法内部编写清理代码,导致代码重复。

通过使用 Promise.finally() 方法,可以将清理操作单独提取出来,使代码更简洁、易于维护。例如:

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

Promise.finally() 示例代码

在以下示例中,我们使用 Promise.finally() 在数据请求完成后关闭数据库连接。

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

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

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

结论

Promise.finally() 是 Promise 异步编程中的一个非常有用的新特性。它只能在 Promise 函数链中被使用,它的主要作用是对 Promise 执行完后进行操作(无论 Promise 是否 resolved 或 rejected),该方法可以帮助你统一一些后续操作,并减少代码冗余。

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

纠错
反馈