Async JavaScript

Promise Combinators

Promise combinators coordinate multiple async operations. all, allSettled, race, and any encode different success and failure strategies.
  • Promise.all is all-or-fail-fast
  • Promise.allSettled waits for every outcome
  • Promise.race uses first settled result
  • Promise.any uses first fulfillment
  • Combinators do not cancel the losers automatically
Promise combinators
CombinatorFulfillmentRejectionGood for
Promise.allAll fulfillFirst rejectionIndependent required work
Promise.allSettledAlways after all settleNever from child rejectionBatch reports
Promise.raceFirst settled fulfillsFirst settled rejectsTimeouts / first response
Promise.anyFirst fulfillmentAll rejectFallback mirrors
Partial success with allSettled
const results = await Promise.allSettled(urls.map(fetchJson))

const successes = []
const failures = []

for (const result of results) {
  if (result.status === "fulfilled") successes.push(result.value)
  else failures.push(result.reason)
}
Use allSettled when failure of one item should not hide the rest.
Sources
  • MDN JavaScript Guide and ReferencePromise composition
  • The Modern JavaScript TutorialPromise API
  • Node.js Documentation and Learn Node.jsPromises in Node.js