ES9 中的 Promise.prototype.finally() 方法

阅读时长 4 分钟读完

Promise 是现代 JavaScript 中非常重要的概念之一,它是一种用于处理异步操作的对象。在 ES6 中,Promise 对象被引入了 JavaScript,它提供了一种处理异步操作的方式,让我们可以更加方便地处理异步操作和错误。

在 ES9 中,Promise 对象被添加了一个新的方法:Promise.prototype.finally() 方法。这个方法的作用是在 Promise 对象的状态变为 resolved 或 rejected 后,无论是成功还是失败,都会执行指定的回调函数。

为什么需要 Promise.prototype.finally() 方法

在处理异步操作时,我们通常会使用 then() 和 catch() 方法来处理 Promise 对象的状态。但是,有些情况下,我们需要在 Promise 对象的状态变为 resolved 或 rejected 后,无论是成功还是失败,都需要执行一些操作,比如关闭数据库连接、释放资源等等。这时候,使用 then() 和 catch() 方法就不够方便了。

Promise.prototype.finally() 方法的出现,就是为了解决这个问题。它可以让我们在 Promise 对象的状态变为 resolved 或 rejected 后,都可以执行指定的回调函数,无需关心 Promise 对象的状态是成功还是失败。

Promise.prototype.finally() 方法的语法

Promise.prototype.finally() 方法的语法如下:

其中,promise 表示一个 Promise 对象,onFinally 表示一个回调函数。

Promise.prototype.finally() 方法的使用

下面是 Promise.prototype.finally() 方法的使用示例:

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

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

在上面的示例中,我们创建了一个 Promise 对象,并使用 then() 和 catch() 方法来处理 Promise 对象的状态。在最后使用了 finally() 方法来指定一个回调函数,这个回调函数会在 Promise 对象的状态变为 resolved 或 rejected 后都会执行。

Promise.prototype.finally() 方法的注意事项

使用 Promise.prototype.finally() 方法需要注意以下几点:

  1. Promise.prototype.finally() 方法返回一个新的 Promise 对象,它的状态和原来的 Promise 对象一样。如果回调函数返回一个 Promise 对象,则新的 Promise 对象的状态会根据这个 Promise 对象的状态来决定。

  2. Promise.prototype.finally() 方法不会改变原来 Promise 对象的状态,它只是在 Promise 对象的状态变为 resolved 或 rejected 后执行指定的回调函数。

  3. Promise.prototype.finally() 方法的回调函数没有参数,它只是在 Promise 对象的状态变为 resolved 或 rejected 后执行。

总结

Promise.prototype.finally() 方法是 ES9 中新增的一个方法,它可以让我们在 Promise 对象的状态变为 resolved 或 rejected 后都可以执行指定的回调函数,无需关心 Promise 对象的状态是成功还是失败。在实际开发中,我们可以使用 Promise.prototype.finally() 方法来处理一些需要在 Promise 对象状态变化后执行的操作,比如关闭数据库连接、释放资源等等。

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

纠错
反馈