Async & Promisesmedium

Implement Promise.allSettled(promises)

Implement `Promise.allSettled` — unlike `Promise.all`, it waits for all promises and returns an array of `{ status, value/reason }` objects, never rejecting.

Asked at Meta, Google

#promises#async

Answer

function promiseAllSettled(promises) {
  return Promise.all(
    promises.map(p =>
      Promise.resolve(p)
        .then(value  => ({ status: 'fulfilled', value }))
        .catch(reason => ({ status: 'rejected',  reason }))
    )
  )
}

// Test
promiseAllSettled([
  Promise.resolve(1),
  Promise.reject('oops'),
  Promise.resolve(3),
]).then(console.log)
// [
//   { status: 'fulfilled', value: 1 },
//   { status: 'rejected',  reason: 'oops' },
//   { status: 'fulfilled', value: 3 },
// ]

Practise more Async & Promises questions →