Promise.finally: ES9 中的新特性,无需重复 try-catch 语句(Promise.finally: A new feature in ES9 eliminates the need for duplicate try-catch statements)

阅读时长 4 分钟读完

在前端开发中,Promise 是常用的处理异步操作的方式之一。然而,使用 Promise 时经常会遇到一种情况:需要在 thencatch 中执行一些清理操作。比如,无论 Promise 中的操作是否成功,我们都希望能够关闭打开的文件或数据库连接等资源。在这种情况下,我们需要在 thencatch 中都添加一遍清理操作,这显然很笨重且容易出错。

ES9 引入了 Promise.finally 方法,它可以在 Promise 执行结束后(无论是成功还是失败)执行一些清理操作,从而消除了重复 try-catch 语句的需要。

Promise.finally 的使用

使用 Promise.finally 非常简单。我们只需要使用一个 finally 的回调函数作为参数传递给我们当前的 Promise,这个回调函数会在 Promise 执行完毕后被调用。例如:

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

在这个示例中,无论 fetch 是否成功,都会执行 .finally 中的清理回调。

没有重复的 try-catch

相比于使用 try-catch 语句,Promise.finally 代码更加简洁,因为我们无需在每个 try-catch 语句中都添加清理操作的代码。同时,try-catch 语句可能会隐藏错误,而 Promise.finally 可以在所有情况下清理资源,减少出现错误的可能性。

案例分析

下面我们看一个更复杂的案例,应用 Promise.finally 可以使得代码更加优雅。

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

在这段代码中,我们使用了 try-catch-finally 语句来确保资源在请求返回或异常被处理后得到释放。但是,这种模式很容易出现错误。使用 Promise.finally 可以使得代码更加优雅:

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

结论

在 ES9 中,Promise.finally 提供了一种新的方式来处理异步操作中的清理操作,避免了在 thencatch 中重复编写清理代码的需要,同时还可以保持代码清晰易懂。建议开发人员在使用 Promise 时考虑使用 Promise.finally

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

纠错
反馈