ECMAScript 2018:新增 Promise.allSettled 方法

介绍

ECMAScript 2018(简称 ES2018)是 JavaScript 的一个版本,它于2018年发布。这个版本新增了一些功能,包括 Promise.allSettled 方法。

在 Javascript 中,Promise.all 方法可以用于并行处理多个异步操作。但它只能处理成功的异步操作,一旦有一个异步操作失败了,就会直接抛出错误。而 Promise.allSettled 则可以处理异步操作无论成功还是失败都返回结果。

使用

Promise.allSettled 方法接收一个 Promise 数组作为参数,返回一个 Promise 对象,这个返回值是一个包含了所有 Promise 对象状态信息的对象数组。这个对象数组中的每个对象都表示一个 Promise 对象的状态信息,包含以下两个属性:

  • status:Promise 对象的状态,值可以是 fulfilled(成功)或 rejected(失败)
  • value:如果 Promise 对象状态是 fulfilled,对应的数据值;如果是 rejected,则对应的错误对象

示例代码:

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

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

以上代码会打印出如下结果:

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

指导意义

使用 Promise.allSettled 方法可以更好的处理异步任务:

  • 可以返回所有 Promise 对象的状态,方便我们针对状态做出不同的处理;
  • 不用担心 Promise 对象的异常终止会导致 Promise.all 方法无法返回结果的问题,即使异步操作失败,我们也能将结果返回给调用方。

我们可以使用 Promise.allSettled 来显示一些“关于国内视频网站”的搜索结果,无论该网站是否真实存在。

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

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

以上代码会打印出类似以下结果:

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

结论

Promise.allSettled 方法丰富了 JavaScript 异步处理的能力,让我们可以更好的处理异步任务。同时,我们也可以使用这个方法来处理一些可疑的异步操作,例如在搜索引擎中,处理关于未知网站的搜索结果。

值得注意的是,Promise.allSettled 字符串判断状态值,而不是布尔值,因此需要使用 status === 'fulfilled'status === 'rejected' 来判断状态。

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