ES9 新特性:Promise.prototype.finally()

前言

Promise 是 JavaScript 中用于异步编程的一种解决方案。它是 ES6 中引入的新对象,通过 Promise,我们可以更优雅地处理异步代码,避免回调地狱式的代码。随着 ES6 的使用越来越广泛,Promise 也变得越来越重要。

在 ES9 中,Promise.prototype.finally() 成为了一个新的特性。它为 Promise 增加了一个 finally 方法,使得我们可以在 Promise 无论成功还是失败都清理一些资源。本文中,我们将详细介绍 Promise.prototype.finally() 的使用方法和其在实际开发中的指导意义。

什么是 Promise.prototype.finally()

Promise.prototype.finally() 是一个新的实例方法,它被添加到了 Promise 原型对象中。该方法只需要一个回调函数作为参数,并在 Promise 被解决或拒绝后执行该回调函数。

该方法有以下特点:

  • finally 方法不管 Promise 对象最终的状态如何,都会执行;
  • finally 方法的回调函数不接受任何的参数,也就是说,无法获取到前面两个方法的返回值;
  • finally 方法主要是针对于无论 resolve 或 reject 的情况,都需要在 Promise 执行结束后执行的情况。

Promise.prototype.finally() 的语法

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

--------------------------
  • promise:Promise 对象。
  • onFinally:Promise 被解决或拒绝后执行的回调函数。

Promise.prototype.finally() 的示例代码

下面我们通过一个实例代码来展示 Promise.prototype.finally() 的使用方法:

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

在该代码中,我们使用 Promise.resolve() 构造一个 Promise 对象,并对其进行链式调用。在第一个 then 方法中,我们将 value 传入一个匿名函数,控制台输出 Resolved: 3,并抛出一个错误。在 catch 方法中,我们捕获了这个错误,并返回一个新的值 4。

在第二个 then 方法中,我们又将 value 传入一个匿名函数,控制台输出 Resolved: 4,并再次抛出一个错误。在 finally 方法中,我们只是简单地将 finally 输出到控制台。

在最后一个 then 方法中,我们又将 value 传入一个匿名函数,控制台输出 Resolved: undefined。在 catch 方法中,我们捕获到了第二个错误,并输出 Catch: Error: test。

Promise.prototype.finally() 的指导意义

Promise.prototype.finally() 的主要用途是,不管 Promise 中的状态是成功还是失败,都可以使用 finally 来清理一些资源或执行一些必须执行的代码。常见的场景包括:

  • 手动释放资源;
  • 无论成功或失败都需要执行的代码;
  • 是否继续向下传递的判断。

在实际开发中,我们通常都需要确保开头或最后执行一些代码,如清理资源或日志记录等,这时候 finally 方法就非常有用了。例如:

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

在这个例子中,我们使用了 finally 方法来确保控制台输出了正确的日志,无论请求是成功还是失败。

结论

Promise.prototype.finally() 提供了一种清理资源和确保代码必须执行的方法。在实际开发中,我们常常需要确保资源被释放掉,并且需要对日志进行记录。Promise.prototype.finally() 提供了一种简单的方式,可以在 Promise 被解决或拒绝后执行一些必要的代码。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6736aead0bc820c58255c1b5