ES10 中新加入的静态方法 Promise.allSettled()

阅读时长 3 分钟读完

在 ES10 中,新增了一个静态方法 Promise.allSettled(),它可以用于处理 Promise 数组的状态,不管 Promise 的状态是成功还是失败,都会被处理。

Promise.all 和 Promise.race 的局限性

在 ES6 中,Promise.all 和 Promise.race 是非常常用的方法,它们分别用于等待所有 Promise 完成和等待任意一个 Promise 完成。

但是,Promise.all 和 Promise.race 存在一些局限性。当 Promise 数组中有一个 Promise 失败时,Promise.all 会立即返回一个失败的 Promise,而 Promise.race 会返回第一个完成的 Promise,无论它的状态是成功还是失败。

这些限制使得在处理 Promise 数组时,需要额外的逻辑来处理失败的情况。

Promise.allSettled 的作用

Promise.allSettled 方法解决了 Promise.all 和 Promise.race 的局限性,它会等待所有 Promise 完成,并返回一个包含每个 Promise 状态的数组,每个元素都是一个对象,包含以下两个属性:

  • status:Promise 的状态,可能的值为 "fulfilled" 或 "rejected"。
  • value:如果状态为 "fulfilled",则为 Promise 的返回值;如果状态为 "rejected",则为 Promise 的拒绝原因。

这样,我们就可以很方便地处理 Promise 数组的状态,而不需要额外的逻辑来处理失败的情况。

Promise.allSettled 的示例

下面是一个使用 Promise.allSettled 的示例:

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

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

输出结果如下:

结论

Promise.allSettled 是一个非常有用的方法,它可以帮助我们处理 Promise 数组的状态,不管 Promise 的状态是成功还是失败,都会被处理。使用它可以让我们的代码更加简洁和易于维护。

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

纠错
反馈