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 |
瀏覽器相容性
載入中…