ECMAScript 2018 中全局对象Promise的优化

阅读时长 6 分钟读完

在现代的Web开发中,异步编程已经成为了不可避免的趋势。Promise 就是其中的一种实现方式。Promise有很好的特性,比如解决了回调地狱问题,使代码更加简洁。在 ECMAScript 2018中,全局对象Promise进行了优化,本文将会详细介绍这些优化。

Promise.prototype.finally() 方法

Promise 对象提供了 then()catch() 方法,用于表示Promise对象的状态改变。而在ES2018中,增加了 finally() 方法。该方法在 Promise 被rejected和resolved后都会执行,不管 Promise 是成功还是失败。

下面是 finally() 方法的用法示例:

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

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

在上述代码中,finally() 方法被添加到 Promise 实例中。在 then() 或者 catch() 方法之后调用 finally() 方法,不管 Promise 结果如何,都会执行finally() 方法。在某些场景下,你可能需要在 Promise 执行返回结果前执行语句,那么就可以使用 finally() 方法。

Promise.try()

通过 Promise.try()方法执行函数,函数运行过程中发生的错误,都会被 try/catch 语句捕获,如果 try/catch 中代码发生错误,则导致 promise 被rejected。如果没有错误,则返回结果会被 promise 解析。

以下是 Promise.try() 方法的简单用法示例:

在上面的代码中,调用了 Promise.try()方法来执行函数,由于函数中抛出了错误,程序将会被错误捕获并输出到控制台。

这种方法在于使用 try/catch 语句进行错误处理不同,以前需要硬编码的 try/catch 语句现在能悄悄的指定给 Promise.try()方法。在某些场景下,这可能会使你的代码变得更加简洁。

Promise.allSettled()

在之前Promise版本中,要么返回所有 Promise 成功解析后的值,要么直接返回一个rejected的 Promise。而 ECMAScript 2018 中新增了 Promise.allSettled() 方法 ,用来返回一个 Promise 实例数组,包含所有 promise 状态数据,无论是成功还是失败。

下面是 Promise.allSettled() 的用法示例:

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

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

在上述例子中,使用 Promise.allSettled() 方法返回了两个 Promise 的状态数组。第一个 Promise,状态为resolved,并且解析 Promise 数据为 1。第二个 Promise 状态为rejected,并且reject Promise 数据为 'ERROR'。

Promise.any()

Promise.any()方法在 Promise 任意一个 Promise 成功解析后进行返回结果。如果所有 Promise 进入 rejected 状态,将抛出 AggregateError, 包含所有异常信息。

下面是 Promise.any() 的用法示例:

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

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

在上述代码中,使用 Promise.any() 方法,来执行一个 Promise 数组,该数组包含两个 Promise 状态为rejected,一个 Promise 状态为resolved。因此,最后返回的结果为 2。

结论

在ECMAScript 2018 版本中全局对象 Promise 的优化,使得Promise更加强大、易用且更具表现力。新的特性增加了promise的异常处理、执行顺序以及实现维护等方面的便利。在实际开发中,我们可以采用这些新特性以减轻异步代码带来的负担。

参考资源

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

纠错
反馈