Promise.all 和 Promise.allSettled 的区别及应用场景

· 约 4 分钟读完

Promise.all 和 Promise.allSettled 的区别及应用场景

Promise 是 JavaScript 中异步编程的重要部分,而 Promise.all 和 Promise.allSettled 这两个方法则是在处理多个 Promise 并行时非常实用的方法。然而,这两个方法有明显的差异,需要根据实际情况进行选择使用。

Promise.all 的用法

首先,我们来看下 Promise.all 的用法。Promise.all 接受一个 Promise 对象数组作为参数,并在所有 Promise 都成功处理后执行回调函数。

上面的代码中,我们创建了三个 Promise 对象,并使用 Promise.all 将它们一起处理。当所有 Promise 对象都成功处理后,我们打印出了它们的值。如果有任何一个 Promise 失败,Promise.all 就会终止并返回失败的信息。

Promise.allSettled 的用法

与 Promise.all 不同,Promise.allSettled 不会因为其中任何一个 Promise 失败而终止其它 Promise 的处理。相反,它会等待所有 Promise 处理完成后返回一个包含每个 Promise 回调信息的数组。

上述代码中,我们创建了一个数组,包含了三个 Promise 对象。其中 p2 是一个拒绝的 Promise。当我们使用 Promise.allSettled 时,它返回的是一个包含三个对象的数组,它们描述了每个 Promise 的结果,包括该 Promise 是否成功。

Promise.all 和 Promise.allSettled 的应用场景

Promise.all 和 Promise.allSettled 都是并行处理 Promise 的有用工具。不过,它们在不同的场景下可能具有不同的变体。

  • Promise.all: 如果您希望在多个 Promise 都成功时处理结果,您应该使用 Promise.all。例如,如果您正在处理一个应用中的多个 API 请求,那么您可能只需要在所有这些请求都成功处理时执行一些操作。
  • Promise.allSettled: 如果您希望处理所有 Promise 的回调信息(无论是成功还是失败),那么您可以使用 Promise.allSettled。例如,如果您想获取多个 API 请求的所有结果,并将它们放在一个数组中,这就是一个完美的场景。

示例代码

我们来看一下如何在上面的例子中使用 Promise.all 和 Promise.allSettled:

上述代码中,我们使用了三个 Promise 对象,并分别进行了处理。使用 Promise.all,我们处理了这三个 Promises 并在其中有任何一个 Promise 拒绝时捕获了错误。

在另一方面,我们还使用了 Promise.allSettled 处理数组。由于 p2 被拒绝,我们也捕获了这个拒绝的 Promise。

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