ECMAScript 2018(ES9)中新增加的 Promise.prototype.finally() 方法的详解

阅读时长 5 分钟读完

在 ECMAScript 2018 中,新增加了 Promise.prototype.finally() 方法,它是对 Promise 函数的完善,使得在实现异步操作时更加方便灵活。这篇文章将对 Promise.prototype.finally() 方法进行详细解析,并提供一些相关的示例代码。

Promise 的基本原理

Promise 是一种异步操作的解决方案,它可以避免回调地狱的问题。一个 Promise 对象代表一个异步操作,它有三种状态:pending(等待状态)、fulfilled(完成状态)、rejected(拒绝状态)。

在 Promise 中,我们一般使用then() 方法来处理异步操作完成时的结果,或者使用catch() 方法来处理异步操作失败时的异常。Promise.prototype.then() 方法的作用是为 Promise 实例添加处理异步操作成功的回调函数。而 Promise.prototype.catch() 方法则是为 Promise 实例添加处理异步操作失败的回调函数。

例如,下面的示例代码展示了使用 Promise 方法处理异步操作的基本流程:

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

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

执行以上代码时,会先等待 2 秒,然后输出以下结果:

Promise.prototype.finally() 方法的详解

Promise.prototype.finally() 方法是 Promise 方法的一种新的操作方式,它允许我们在 Promise 执行完成时执行一些必要的清理工作,例如关闭数据库连接、释放资源等等。该方法的语法如下:

其中,promise 表示需要执行的 Promise 对象,onFinally 表示该 Promise 对象执行完成时需要执行的操作。

Promise.prototype.finally() 方法返回的 Promise 对象 resolves 的值是上一个 Promise 对象的结果(包括 Promise 对象本身或值)或拒绝的原因(不包括 Promise 对象本身或值)。

下面的示例代码展示了 Promise.prototype.finally() 方法的基本使用:

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

输出以下结果:

从上面的示例代码我们可以看到,不管 Promise 对象是否成功,无论这个 Promise 对象在执行过程中发生了什么异常,都会执行 finally() 方法内部的代码。

Promise.prototype.finally() 方法的一个优点是它比 try...catch...finally 更加简单明了,可以更好地在代码中使用。

示例代码

下面是一个关于 Promise.prototype.finally() 方法的示例代码:

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

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

执行以上代码,输出以下结果:

从上面的代码可以看出,即使 Promise 操作失败了,finally() 方法内部的代码也会被执行。

总结

本文对 ECMAScript 2018 中的 Promise.prototype.finally() 方法进行了详细介绍,并提供了相关的示例代码。通过对该方法的学习,我们可以更加灵活地处理 Promise 异步操作,同时也可以更加方便地管理程序资源。

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

纠错
反馈