ECMAScript 2018:新增 Promise.prototype.{finally, try}()

ECMAScript 2018:新增 Promise.prototype.{finally, try}()

简介

许多开发人员在编写 JavaScript 代码时,使用对异步操作的 Promise 返回对象。在 ECMAScript 2018 中,Promise 对象的 API 得到了增强,它们现在包括了 Promise.prototype.finally() 和 Promise.prototype.try() 方法。

Promise.prototype.finally()

Promise.prototype.finally() 实际上是个解决finally在捕获异常方面的问题。在ECMAScript 2015(ECMAScript6)标准中,Promise.prototype.then() 与 Promise.prototype.catch() 中,往往在出现异常时返回一个新的 Promise 对象。这使得开发人员需要重复编写清理逻辑,以确保代码尽早释放请在出现异常时适时中断 Promise 运行。

. then() 和 . catch() 能接收两个参数:resolve 和 reject。

finally 方法只需要传入一个回调函数,它不关心 Promise 是正常结束还是发生了异常。在 finally 回调函数中,可以关闭任何打开的文件描述符、数据库连接,或者执行任何必要的清理操作。

Promise.prototype.try()

Promise.prototype.try() 实现了异步判断,实现了错误捕捉并且返回 Promise 实例。比方说,您经常会看到类似这样的代码:

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

这种模式很繁琐,很容易出错。何必要如此麻烦呢?Promise.prototype.try() 带来了一种简单的解决方案,而不会触发新的 try-catch 循环,因为它将自己隔离在一个独立的上下文中。此方法的另一个好处是,它可以在同步函数和异步函数之间自动切换,而不需要在这些函数之间切换代码。这使得代码非常灵活,容易阅读和维护。

实例展示

我们来看几个示例,以便理解这两个新方法的功能。

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

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

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

如上所述,Promise.prototype.finally() 是一种优雅的解决方法,可以用少量的代码清理、处理不幸发生的情况,对开发人员编写维护更高质量的代码是很有帮助的。同样的事情,Promise.prototype.try() 强大、灵活性高,并可以将编写 JavaScript 代码的体验提升到一个新的水平。

结论

Promise.prototype.finally() 和 Promise.prototype.try() 的增强,将使在异步 / Promise 编程的 JavaScript 中处理错误变得更加容易。它们的使用不仅仅是为了清理堆栈,而且用于异步异常处理也是很灵活的。尝试并了解这些新方法,以便更轻松地编写更优秀的 JS 代码。

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