Wait for all promises to complete regardless of whether they resolve or reject, getting results for each one.

Explanation

  • Promise.allSettled(): Returns a promise that resolves when all input promises settle (resolve or reject).
  • Each result object has status (‘fulfilled’ or ‘rejected’) and either value or reason.
  • Unlike Promise.all(), it doesn’t short-circuit on first rejection.
  • Useful for batch operations where you need all results, including failures.

Usage

To handle multiple promises and get all outcomes:

// Fetch multiple resources, handle individual failures
const urls = [
  'https://api.example.com/user/1',
  'https://api.example.com/user/2',
  'https://api.example.com/invalid', // Will fail
];

const results = await Promise.allSettled(
  urls.map(url => fetch(url).then(r => r.json()))
);

results.forEach((result, index) => {
  if (result.status === 'fulfilled') {
    console.log(`User ${index + 1}:`, result.value);
  } else {
    console.error(`User ${index + 1} failed:`, result.reason);
  }
});

// Separate successes from failures
const successes = results
  .filter(r => r.status === 'fulfilled')
  .map(r => r.value);

const failures = results
  .filter(r => r.status === 'rejected')
  .map(r => r.reason);

console.log(`${successes.length} succeeded, ${failures.length} failed`);