| date | 2025-03-27 08:09:10 +0530 |
|---|---|
| description | Promise.allSettled waits for all promises to settle and returns their outcomes. Never rejects, always returns success and error results. |
| premium | true |
Promise.allSettled() returns a promise that resolves after all input promises have settled (either fulfilled or rejected). Unlike Promise.all(), it never rejects—it always returns an array of result objects describing each promise's outcome.
Promise.allSettled returns a promise that:
- ✅ Resolves when all input promises settle (either resolve or reject)
- ❌ Never rejects — result always contains an array of outcomes
Each result is an object with shape:
- If resolved:
{ status: "fulfilled", value: result } - If rejected:
{ status: "rejected", reason: error }
Use Promise.resolve(...) to handle non-promise inputs.
- Maintain
results[] - Track how many have settled
- Resolve once all have settled
- Empty input → resolve to
[]immediately
function promiseAllSettled(iterable) {
return new Promise((resolve) => {
const promises = Array.from(iterable);
const results = [];
let settledCount = 0;
if (promises.length === 0) return resolve([]);
promises.forEach((p, i) => {
Promise.resolve(p)
.then(value => {
results[i] = { status: "fulfilled", value };
})
.catch(reason => {
results[i] = { status: "rejected", reason };
})
.finally(() => {
settledCount++;
if (settledCount === promises.length) {
resolve(results);
}
});
});
});
}promiseAllSettled([
Promise.resolve(1),
Promise.reject("fail"),
3
]).then(console.log);
/*
[
{ status: "fulfilled", value: 1 },
{ status: "rejected", reason: "fail" },
{ status: "fulfilled", value: 3 }
]
*/- Promise.allSettled runs promises sequentially
- Promise.allSettled is faster than Promise.all
- Promise.allSettled never rejects and returns all outcomes regardless of failures
- Promise.allSettled only works with async/await syntax
-
{ success: false, error: reason } -
{ fulfilled: false, value: reason } -
{ status: "rejected", reason: error } -
{ state: "error", message: reason }
- It throws an error
- It returns a promise that never settles
- It resolves immediately with an empty array []
- It rejects with an AggregateError