Promise.allSettled()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2020.
ThePromise.allSettled() static method takes an iterable of promises as input and returns a singlePromise. This returned promise fulfills when all of the input's promises settle (including when an empty iterable is passed), with an array of objects that describe the outcome of each promise.
In this article
Try it
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"Syntax
Promise.allSettled(iterable)Parameters
Return value
APromise that is:
Already fulfilled, if the
iterablepassed is empty.Asynchronously fulfilled, when all promises in the given
iterablehave settled (either fulfilled or rejected). The fulfillment value is an array of objects, each describing the outcome of one promise in theiterable, in the order of the promises passed, regardless of completion order. Each outcome object has the following properties:statusA string, either
"fulfilled"or"rejected", indicating the eventual state of the promise.valueOnly present if
statusis"fulfilled". The value that the promise was fulfilled with.reasonOnly present if
statusis"rejected". The reason that the promise was rejected with.
If the
iterablepassed is non-empty but contains no pending promises, the returned promise is still asynchronously (instead of synchronously) fulfilled.
Description
ThePromise.allSettled() method is one of thepromise concurrency methods.Promise.allSettled() is typically used when you have multiple asynchronous tasks that are not dependent on one another to complete successfully, or you'd always like to know the result of each promise.
In comparison, the Promise returned byPromise.all() may be more appropriate if the tasks are dependent on each other, or if you'd like to immediately reject upon any of them rejecting.
Examples
>Using 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 }// ]Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-promise.allsettled> |