Promise.allSettled() 的使用及注意事项

阅读时长 4 分钟读完

Promise.allSettled() 是一个ES2020新增的Promise方法,它可以在所有Promise都已经fulfilled或rejected后返回一个数组,该数组包含每个Promise的fulfilled或rejected结果。与 Promise.all() 方法不同的是,Promise.allSettled() 在触发reject后还是会继续执行并按顺序返回所有结果,因此无需担心其中某一个Promise出问题导致整个操作失败的问题。

简单使用示例

下面,我们给出一个简单的使用示例:

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

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

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

注意事项

  • Promise.allSettled() 的返回结果始终是一个数组,无论Promise是fulfilled还是rejected。
  • 在某些情况下,使用Promise.allSettled() 可能会使代码难以调试,因为即使其中一个Promise发生了reject,整个Promise.allSettled() 并不会停止执行并且可能会继续执行后续的操作。
  • 对于旧版浏览器,Promise.allSettled() 可能不支持。在这种情况下,您可以使用 polyfill 来解决问题。

活学活用

Promise.allSettled() 方法在解决一些需要并行执行的任务时非常有用。例如,您可以使用Promise.allSettled() 来处理批量请求的响应结果。在下面的示例代码中,我们使用 fetch 获取本文章所在网站的一些数据,并处理该数据。

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

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

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

在上述代码中,我们使用了 fetch API 来获取本文章所在网站的一些数据,并将数据存储在一个数组中。然后,我们使用 Promise.allSettled() 方法同时处理这些请求。在返回结果时,我们使用 forEach() 来读取每个请求的结果。对于fulfilled的请求,我们将获取到的数据解析为JSON格式并输出到控制台。对于rejected的请求,我们将输出错误信息到控制台。通过这种方式,我们可以轻松地批处理多个请求并处理其结果。

总结

Promise.allSettled() 方法是一个非常有用的处理Promise操作的方法,它可以在所有Promise都已经fulfilled或rejected后返回一个按顺序处理的结果。尽管该方法是ES2020的特性,但由于其在处理一些需要并行执行的任务时有所帮助,因此建议您在编写代码时进行研究和使用。对于旧版浏览器,您可以使用 polyfill 来解决不支持Promise.allSettled() 的问题。

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

纠错
反馈