如何在 Promise.all 遇到错误时返回值?

阅读时长 4 分钟读完

在前端开发中,我们经常使用 Promise.all 方法对多个 Promise 实例进行并行执行,当所有 Promise 异步操作结束后,再进行下一步处理。但是,当其中一个 Promise 发生错误时,Promise.all 可能会中止执行,并返回错误信息而不是其他 Promise 的结果。本文将介绍如何在 Promise.all 遇到错误时返回值。

Promise.all 的错误处理

在 Promise.all 中,如果其中一个 Promise 发生错误,会导致整个 Promise.all 中止执行,并返回一个错误信息。

例如:

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

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

上述代码的输出结果是 Error: bar,因为 Promise.all 遇到错误时会立即中止执行,并返回导致错误的 Promise 对象的错误信息。这会使得其他 Promise 实例无法返回结果。

如何在 Promise.all 遇到错误时返回值

为了在 Promise.all 遇到错误时返回值,我们可以使用 Promise.allSettled 方法,该方法返回一个包含所有 Promise 对象的状态(fulfilled 或 rejected)和结果的数组,而不是一个错误信息。可以通过筛选数组来获取需要的结果。

例如:

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

上述代码的输出结果是 ['foo', 'baz'],因为 Promise.allSettled 返回一个数组,包含所有 Promise 对象的状态和结果(无论 Promise 是否成功)。我们可以通过数组的 filter 和 map 方法来获取所有成功 Promise 的结果。

另外,我们也可以使用 Promise.all 方法和 catch 来处理 Promise 的错误,在 Promise.all 的 then 方法中对结果进行筛选。例如:

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

上述代码的输出结果是 ['foo', 'baz']。我们在使用 Promise.all 时可以使用 catch 方法来捕获错误,并在 then 方法中对结果进行筛选。

总结

本文介绍了如何在 Promise.all 中遇到错误时返回值。我们可以使用 Promise.allSettled 方法获取所有 Promise 对象的状态和结果,然后通过筛选数组来获取需要的结果。另外,我们也可以使用 Promise.all 方法和 catch 来处理 Promise 的错误,在 then 方法中对结果进行筛选。正确处理 Promise 的错误,对于保证开发效率和代码质量都非常重要。

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

纠错
反馈