Promise.allSettled()
是 Promise 提供的静态方法,用于等待所有传入的 Promise 完成(无论成功或失败),并返回包含所有任务结果的数组。其语法如下:
基本语法
Promise.allSettled(iterable)
参数说明
iterable
:一个可迭代对象(通常是数组),其中可以包含 Promise 实例或非 Promise 值(如普通数字、字符串等)。- 若元素不是 Promise,会被自动包装为
Promise.resolve(元素)
(视为成功状态)。
- 若元素不是 Promise,会被自动包装为
返回值
返回一个新的 Promise 对象,该对象的状态只会变为 fulfilled
(永远不会变为 rejected
),其结果是一个数组,数组中的每个元素对应传入的每个 Promise 的执行结果,结构如下:
- 对于成功的 Promise(
fulfilled
):{ status: "fulfilled", value: <成功结果> }
- 对于失败的 promise(
rejected
):{ status: "rejected", reason: <错误原因> }
示例代码
// 定义三个异步任务(2个成功,1个失败)
const promise1 = Promise.resolve("操作A成功");
const promise2 = Promise.reject(new Error("操作B失败"));
const promise3 = new Promise(resolve => {
setTimeout(() => resolve resolve("操作C成功"), 1000);
});
// 使用 allSettled 等待所有任务完成
Promise.allSettled([promise1, promise2, promise3])
.then(results => {
// 遍历结果数组,处理每个任务的状态
results.forEach((result, index) => {
if (result.status === "fulfilled") {
console.log(`任务${
index + 1}成功:`, result.value);
} else {
console.log(`任务${
index + 1}失败:`, result.reason.message);
}
});
});
输出结果
任务1成功: 操作A成功
任务2失败: 操作B失败
任务3成功: 操作C成功
关键特点
- 始终等待所有传入的任务完成(无论成功或失败)。
- 返回的 Promise 只会成功(
fulfilled
),不会失败(rejected
)。 - 结果数组与传入的可迭代对象顺序一致,便于对应处理每个任务的结果。
这个方法适合需要完整掌握所有异步任务执行情况的场景(如批量操作的统计、日志记录等)。