如何解决 Promise.all() 中单个 promise 出错导致全部失败的问题

阅读时长 3 分钟读完

Promise.all() 是一个非常有用的函数,它可以同时运行多个 Promise 对象,并在所有 Promise 对象都完成后返回一个新的 Promise 对象,这个新的 Promise 对象的结果是所有 Promise 对象的结果的数组。然而,如果其中一个 Promise 对象出错,那么所有的 Promise 对象都会失败,这对于一些需要同时运行多个 Promise 对象的场景来说是非常不友好的。

在本文中,我们将介绍如何解决这个问题,并提供一些示例代码。

解决方案

要解决这个问题,我们可以使用 Promise.allSettled() 函数。这个函数与 Promise.all() 函数非常相似,但是它不会在其中一个 Promise 对象失败时立即拒绝整个 Promise 对象。相反,它会等待所有 Promise 对象都完成后返回一个新的 Promise 对象,这个新的 Promise 对象的结果是一个数组,其中每个元素都是一个对象,这个对象包含了每个 Promise 对象的状态和结果。

下面是一个示例代码:

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

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

在这个示例代码中,我们创建了一个包含三个 Promise 对象的数组。第一个 Promise 对象会成功,第二个 Promise 对象会失败,第三个 Promise 对象也会成功。然后,我们使用 Promise.allSettled() 函数来运行这三个 Promise 对象,并在它们都完成后输出结果。在输出结果之前,我们使用 filter() 函数来过滤出成功和失败的 Promise 对象,并将它们分别存储在 successfulResults 和 failedResults 变量中。

指导意义

使用 Promise.allSettled() 函数可以让我们更好地处理同时运行多个 Promise 对象的场景。如果我们使用 Promise.all() 函数,那么当其中一个 Promise 对象失败时,整个 Promise 对象就会被拒绝,这可能会导致我们无法得到其他 Promise 对象的结果。而使用 Promise.allSettled() 函数,我们可以得到所有 Promise 对象的状态和结果,这将帮助我们更好地处理错误和异常情况。

在实际开发中,我们经常会遇到需要同时运行多个 Promise 对象的场景,例如同时从多个 API 中获取数据,或同时上传多个文件等。在这些场景中,使用 Promise.allSettled() 函数可以帮助我们更好地处理错误和异常情况,提高代码的稳定性和可靠性。

结论

在本文中,我们介绍了如何解决 Promise.all() 中单个 Promise 对象出错导致全部失败的问题,提供了使用 Promise.allSettled() 函数的示例代码,并讨论了这个解决方案的学习和指导意义。希望这篇文章能够帮助读者更好地理解 Promise 对象的使用,并在实际开发中提高代码的稳定性和可靠性。

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

纠错
反馈