Promise.allSettled()
Promise.allSettled() 静态方法接受一个 Promise 可迭代对象作为输入,并返回一个单独的 Promise。这个返回的 Promise 在所有输入的 Promises 都“settle”(即完成或拒绝)时 fulfilled(无论输入的可迭代对象是否为空)。它 fulfilled 的值为一个对象数组,每个对象描述了每个 Promise 的结果。
试一试
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) =>
setTimeout(reject, 100, "foo"),
);
const promises = [promise1, promise2];
Promise.allSettled(promises).then((results) =>
results.forEach((result) => console.log(result.status)),
);
// Expected output:
// "fulfilled"
// "rejected"
语法
Promise.allSettled(iterable)
参数
返回值
一个 Promise,它
-
如果传入的可迭代对象为空,则 **立即 fulfilled**。
-
当给定
iterable中的所有 Promises 都已 settle(fulfilled 或 rejected)时,**异步 fulfilled**。fulfilled 的值为一个对象数组,每个对象描述了iterable中一个 Promise 的结果,顺序与传入的 Promise 顺序一致,不考虑完成顺序。每个结果对象具有以下属性:status-
一个字符串,可能是
"fulfilled"或"rejected",表示 Promise 的最终状态。 value-
只有当
status为"fulfilled"时才存在。Promise fulfilled 的值。 reason-
只有当
status为"rejected"时才存在。Promise 被 rejected 的原因。
如果传入的可迭代对象非空但其中不包含任何待定(pending)的 Promise,则返回的 Promise 仍然是异步 fulfilled(而不是同步)。
描述
Promise.allSettled() 方法是 Promise 并发 方法之一。当你有多个异步任务,它们之间不相互依赖,或者你总是想知道每个 Promise 的结果时,通常会使用 Promise.allSettled()。
相比之下,如果任务相互依赖,或者你希望在任何一个任务 rejected 时立即 rejection,那么由 Promise.all() 返回的 Promise 可能更适合。
示例
使用 Promise.allSettled()
Promise.allSettled([
Promise.resolve(33),
new Promise((resolve) => setTimeout(() => resolve(66), 0)),
99,
Promise.reject(new Error("an error")),
]).then((values) => console.log(values));
// [
// { status: 'fulfilled', value: 33 },
// { status: 'fulfilled', value: 66 },
// { status: 'fulfilled', value: 99 },
// { status: 'rejected', reason: Error: an error }
// ]
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-promise.allsettled |
浏览器兼容性
加载中…