使用 JavaScript Promise.allSettled 轻松处理所有 Promise

阅读时长 3 分钟读完

前言

随着前端技术的发展,我们在开发过程中会经常使用 Promise 来处理异步请求。然而,当我们需要处理多个 Promise 时,如何才能比较优雅的处理它们的状态呢?这就是本文所要介绍的 Promise.allSettled 方法。

Promise.allSettled 方法介绍

Promise.allSettled 方法是 ES2020 新增的方法,它的作用是传入一个 Promise 数组,等待所有的 Promise 完成后返回一个数组,数组中包含每个 Promise 的完成状态(fulfilled 或 rejected)、对应的值或原因(即返回的结果)。

Promise.allSettled 方法的语法如下:

其中 iterable 是一个可迭代对象,包含一系列需处理的 Promise。

值得注意的是,Promise.allSettled 如果接收到一个空数组 ,将直接返回一个已完成状态的 Promise,其值是一个空数组 []。

示例代码

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

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

Promise.allSettled 与 Promise.all 的区别

从示例代码可以看出,Promise.allSettled 返回的结果中会包含每个 Promise 的状态,因此无论各个 Promise 原因是否不同,Promise.allSettled 都会等所有 Promise 完成,才会返回结果。与此不同,Promise.all 是只有当所有 Promise 的原因都相同(都被 resolved),才会返回一个新的 Promise 对象。如果其中任何一个 Promise 被 rejected,Promise.all 就会直接返回一个 rejected 状态的 Promise 对象。

注意事项

尽管 Promise.allSettled 方法是在 ES2020 中引入的,但有些早期的浏览器还不支持该方法,因此在使用前需谨慎检查兼容性,并选择使用 polyfill 来支持该方法。

总结

Promise.allSettled 方法可以方便地处理多个异步请求的状态,在实际项目中非常有用。本文简要介绍了 Promise.allSettled 的使用方法以及与 Promise.all 的区别。如果你在项目中使用过该方法,欢迎分享你的经验和感受。

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

纠错
反馈