使用 ES9 中的 Promise.allSettled() 来处理多个 Promise 的结果

阅读时长 4 分钟读完

ES9 中新增了 Promise.allSettled() 方法,它可以让我们更方便地处理多个 Promise 的结果。

在之前的 Promise.all() 中,当其中一个 Promise 被 reject 时,整个 Promise.all() 也会失败,并返回该 Promise 的错误信息,而 Promise.allSettled() 则不同,不论 Promise 的状态是 fulfilled 还是 rejected,它都会等待所有 Promise 执行完毕,并返回一个数组,该数组中的每个元素都包含了这些 Promise 的状态以及结果或错误信息。

Promise.allSettled() 的参数是一个 Promise 数组,以一个简单的示例说明如下:

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

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

结果输出:

Promise.allSettled() 返回的数组中,每个元素都是一个对象,它包含两个属性:status 和 value 或 reason,分别表示 Promise 的状态和结果或错误信息。如果 Promise 被 resolve,那么 status 的值为 'fulfilled',value 的值为 Promise 的结果;如果 Promise 被 reject,那么 status 的值为 'rejected',reason 的值为 Promise 的错误信息。

有了 Promise.allSettled(),我们可以更方便地处理多个 Promise 的结果,例如:

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

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

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

这是一个请求多个 API,然后过滤出请求成功的结果的示例。使用 Promise.allSettled() 的好处在于:

  • 不需要使用 try...catch 包裹每个 Promise 的执行结果,避免代码冗长。
  • 不用担心某个被 reject 的 Promise 会影响其他 Promise 的执行结果,而要进行额外的处理。

总结

Promise.allSettled() 是 ES9 提供的一个新的方法,它可以更方便地处理多个 Promise 的结果,无论是 fulfilled 还是 rejected 状态,都可以获取到结果或错误信息。使用 Promise.allSettled() 的好处在于代码更加简洁明了,同时也可以避免某个 Promise 造成的异常影响其他 Promise 的执行结果。

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

纠错
反馈