Promise.all vs allSettled
By FrontendPro Editorial Team Updated 9/26/2026
Answer
Both run promises concurrently and wait. They differ in what a failure does.
Promise.all rejects as soon as any input rejects, discarding the results of the others. On success you get an array of values in input order.
Promise.allSettled never rejects. It waits for every promise to settle and gives you an array describing each outcome.
const tasks = [ok(1), fail("boom"), ok(3)];
await Promise.all(tasks);
// throws "boom" — the values 1 and 3 are lost
await Promise.allSettled(tasks);
// [
// { status: "fulfilled", value: 1 },
// { status: "rejected", reason: Error("boom") },
// { status: "fulfilled", value: 3 },
// ]
Which to use
all when you need every result to proceed — loading the user and their permissions before rendering a page. Failing fast is correct there.
allSettled when partial success is useful — fetching six dashboard widgets, where one failing should not blank the whole screen:
const results = await Promise.allSettled(widgets.map(load));
const loaded = results.filter((r) => r.status === "fulfilled").map((r) => r.value);
const failed = results.filter((r) => r.status === "rejected");
One thing both share
All the promises start immediately — they were already running when you passed them in. Neither method cancels the rest when one fails, so with all the other requests still complete; you just never see their results. Use AbortController if you genuinely need to stop the work.
The other two combinators
Promise.race settles with the first promise to settle, fulfilled or rejected — useful for timeouts. Promise.any resolves with the first success and rejects only if all fail, which suits trying several mirrors.
