使用 ES9 Promise.prototype.finally 语法糖实现资源清理和错误处理统一

阅读时长 6 分钟读完

随着前端开发的不断发展,异步编程已成为主流。Promise 作为一种常用的异步编程解决方案也被广泛应用,ES9 新增了 Promise.prototype.finally 方法,为我们提供了一个统一的解决方案:即在 Promise 执行完毕时无论是 resolve 还是 reject 都能够执行特定的操作,比如清理资源。

Promise.prototype.finally 的基本用法

Promise.prototype.finally 方法接收一个回调函数作为参数,当 Promise 进入 finally 阶段时,无论 Promise 的状态是 resovle 还是 reject,都会执行该回调函数。

示例代码:

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

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

输出结果:

Promise.prototype.finally 的示例应用

我们在实际开发中会遇到这样一个场景:我们需要访问服务器获取数据,而在获取数据之前需要获取一个 token,获取 token 过程中可能会出现网络错误,我们需要在 finally 阶段统一清理资源。

示例代码:

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

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

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

输出结果:

Promise.prototype.finally 的作用

  1. 统一清理资源

在开发中我们经常需要做资源的清理工作,比如关闭 socket 连接、释放内存等等。使用 Promise.prototype.finally 可以在 Promise 执行完成后统一清理资源,避免出现资源泄露的情况。

示例代码:

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

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

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

输出结果:

  1. 统一错误处理

在 Promise 执行完成后,使用 Promise.prototype.finally 可以统一处理 Promise 执行中出现的错误情况,避免出现漏掉部分异常情况的情况,从而保证代码的稳定性。

示例代码:

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

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

输出结果:

总结

使用 ES9 的 Promise.prototype.finally 语法糖,我们可以在 Promise 执行完毕之后进行资源的清理和错误的统一处理。在实际开发中,使用 Promise.prototype.finally 可以避免资源的泄露和错误的遗漏,从而保证代码的稳定性和可维护性。

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

纠错
反馈