如何使用 ES9 的 Promise.prototype.finally 解决由缺少 finally 关键字所导致的问题

阅读时长 4 分钟读完

在处理前端的异步编程过程中,经常使用Promise对象来实现异步操作。然而,在Promise对象的then和catch方法中,由于缺少finally关键字,无法在不论操作成功或者失败的情况下,都执行一些必须的收尾工作。因此,ES9新引入的Promise.prototype.finally方法可以很好地解决这个问题。

Promise.prototype.finally的用法

Promise.prototype.finally方法本身不会修改Promise对象状态,只会在Promise对象中,不论操作是否成功或失败,都执行一个回调函数。执行完毕后,将结果传递给下一个Promise对象。

Promise.prototype.finally方法的完整写法如下:

Promise.prototype.finally的指导意义

由于ES9引入的Promise.prototype.finally方法,能够对操作结果成功或失败的异常情况进行收尾工作。这能够使代码更加清晰,方便开发人员进行调试和维护。

除此之外,Promise.prototype.finally方法也能够保证指定的代码总是被执行,不受上一个Promise对象的状态影响。这意味着,即使前一个Promise对象的操作出现了异常问题,收尾工作代码仍然会被执行,确保代码正确性和程序健壮性。

Promise.prototype.finally的示例代码

在下面的示例代码中,我们会使用Promise.prototype.finally方法来处理两个异步操作,通过模拟HTTP请求返回状态码的方式,模拟异步操作成功和失败的场景。

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

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

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

以上代码中,我们使用fetch方法模拟两个不同URL的异步操作。通过使用Promise对象的then和catch方法来处理操作成功或失败的情况。然后,我们使用Promise.prototype.finally方法执行一个收尾工作,来确保不论操作成功或失败,都会执行指定的收尾工作代码。

在运行以上代码后,控制台输出如下:

从输出结果中,我们可以清晰地看到Promise对象的状态变化,并在执行收尾工作后,输出了正确的结果和错误提示信息。这证明了Promise.prototype.finally在实际编码过程中的可行性和指导意义。

总结

ES9引入的Promise.prototype.finally方法,能够解决由缺少finally关键字所导致的问题。它能够确保指定的收尾工作代码不受前一个Promise对象的状态影响,并能够在任何情况下都得到执行。在实际编码过程中,Promise.prototype.finally方法能够提高代码的清晰度、可读性和健壮性。因此,在未来的实际工程中,我们可以使用Promise.prototype.finally来处理异步操作的收尾工作。

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

纠错
反馈