References

Beginner-friendly references for web development, with live, editable examples.

The JavaScript Promise.allSettled() method

Method JavaScript All modern browsers Updated
Quick answer

The Promise.allSettled() method waits for all promises to finish and returns an array describing each outcome — { status: "fulfilled", value } or { status: "rejected", reason }. Unlike Promise.all(), it never rejects, so one failure doesn't lose the other results.

Overview

Promise.allSettled() runs several promises in parallel and waits for every one to settle — fulfill or reject — then hands you an array reporting what happened to each. Each entry is an object: { status: "fulfilled", value } for successes and { status: "rejected", reason } for failures.

The key difference from Promise.all() is that it never rejects. Promise.all() fails fast — one rejection discards all results — which is wrong when you want every operation's outcome regardless of individual failures. Loading several independent widgets, sending a batch of requests, settling a list of uploads: you want to know which succeeded and which failed, and that's exactly what allSettled() gives you.

Because results come back uniformly (no throw), you process them by checking status: filter the "fulfilled" ones for their values, the "rejected" ones for their errors. It pairs with the rest of the Promise combinators — all() (all must succeed), race() (first to settle), and any() (first to fulfill).

Syntax

const results = await Promise.allSettled([p1, p2, p3]);

results.forEach(r => {
  if (r.status === "fulfilled") console.log(r.value);
  else console.log("failed:", r.reason);
});

Parameters

The Promise.allSettled() method accepts the following parameters.

Parameter Description
iterable An iterable (usually an array) of promises. Resolves to an array of { status, value } / { status, reason } objects.

Example

Live example
<pre id="out" style="font:14px ui-monospace,monospace"></pre>
<script>
  const ok = (v) => Promise.resolve(v);
  const fail = (e) => Promise.reject(e);

  Promise.allSettled([ok('A'), fail('boom'), ok('C')]).then(results => {
    document.getElementById('out').textContent =
      results.map(r =>
        r.status === 'fulfilled' ? 'ok: ' + r.value : 'err: ' + r.reason
      ).join('\n');
  });
  // ok: A / err: boom / ok: C
</script>

Best practices

  • Use allSettled() when you want every result, even if some promises reject.
  • Use Promise.all() instead when any failure should abort the whole batch.
  • Process results by checking each status ("fulfilled" vs "rejected").
  • It never rejects, so you usually don't need a try...catch around it.

Frequently asked questions

What is the difference between Promise.all() and Promise.allSettled()?
Promise.all() rejects as soon as one promise fails; allSettled() waits for all and reports each outcome, never rejecting.
When should I use Promise.allSettled()?
When you run several independent operations and want every result regardless of which ones fail.
How do I read the results of allSettled()?
Each entry has a status: check for "fulfilled" (with value) or "rejected" (with reason).
Does Promise.allSettled() ever reject?
No. It always fulfills with the array of outcomes, so individual failures are reported, not thrown.