JavaScript Promise.allSettled()

2025 年 4 月 23 日 | 2 分钟阅读

在 JavaScript 中,Promise.allSettled() 方法允许并发处理多个 Promise 并返回一个单一的 Promise。此 Promise 解析为一个状态描述符数组,每个描述符都详细说明了输入数组中对应 Promise 的结果。

简单来说,Promise.allSettled() 方法等待所有 Promise 解决(fulfilled 或 rejected),并返回一个包含它们结果的数组。

语法

参数

  • iterable: 一个可迭代对象,可以是 Promise 数组或包含一些对象的普通数组。
  • 返回值: 如果传入的参数为空,则返回一个已解决的 Promise;在所有其他情况下,它返回一个待定 Promise,其中包含所有单独传入的 Promise 的状态和值。

示例

编译并运行

输出

 
{ status: 'fulfilled', value: 30 }
{ status: 'rejected', reason: 'Hello' }   

何时使用 Promise.allSettled()

JavaScript 中,当您需要确保所有 Promise 都完成,无论它们是解决还是拒绝状态时,请使用 Promise.allSettled()。此方法对于平稳地管理成功和失败特别有益,而不会在第一次拒绝时停止。

Promise.allSettled 的示例

示例 1

编译并运行

输出

 
{ status: 'fulfilled', value: 'Hello' }
{ status: 'fulfilled', value: 'Bye' }  

说明

在这段代码中,两个 Promise 都以“Hello”和“Bye”的值在 1 秒内解决。Promise.allSettled() 返回一个 Promise,该 Promise 解析为包含两个元素的 Result 数组。第一个元素是 Promise1 解决的对象,第二个元素是 Promise2 拒绝的另一个对象。

示例 2

编译并运行

输出

 
{ status: 'fulfilled', value: 'okay' }
{ status: 'rejected', reason: 'nothing' }

说明

在这段代码中,第一个 Promise p1 在一秒后解决为值“okay”。第二个 Promise p2 在两秒后因原因“nothing”而拒绝。

Promise.allSettled() 返回一个 Promise,该 Promise 解析为包含两个元素的 Result 数组。第一个元素是 Promise p1 解决的对象,第二个元素是 Promise p2 拒绝的另一个对象。

结论

Promise.allSettled() 方法接受一个 Promise 的可迭代集合并返回一个新的 Promise。一旦每个输入 Promise 都已解决,此新 Promise 就会解析,提供一个对象数组,详细说明可迭代对象中每个 Promise 的结果。