DEV Community

Shahzaib Khalid
Shahzaib Khalid

Posted on

Promise.all (ES2015) vs Promise.allSettled (ES2020). What's changed? 🤔

Hey! 👋

Check out today's ⚡️ Dev Tip 💡 👇

Follow me on Twitter @shahzaibkhalid for more Dev Tips! ✨

Let’s say we want to run many promises to execute in
parallel and wait till all of them are ready. 🧐

// some dummy promises to play with 🍭
const p1 = new Promise(resolve => resolve('Shahzaib'));
const p2 = new Promise((_ ,reject) => reject('User does not exists!'));
const p3 = new Promise(resolve => resolve('Lahore'));
Enter fullscreen mode Exit fullscreen mode

Promise.all (short-circuits if any of the promises is rejected)

If any of the passed promises is rejected, the promise
returned by Promise.all immediately rejects with that error. ❌

Promise.all([p1, p2, p3])
  .then(response => console.log(response))
  .catch(error => console.log(error)); // 👉'User does not exists!'
Enter fullscreen mode Exit fullscreen mode

Promise.allSettled (does not short-circuits)

Waits for all passed promises to settle (either resolved or rejected). 🥳

The resulting array has:

  • {status: 'fulfilled', value: result} - for successful responses
  • {status: 'rejected', reason: error} - for errors
Promise.allSettled([p1, p2, p3])
  .then(response => console.log(response));

/**
 * 👉 [ {status: 'fulfilled', value: 'Shahzaib'},
 *      {status: 'rejected', reason: 'User does not exists!'},
 *      {status: 'fulfilled, value: 'Lahore'} ] 🚀
 */
Enter fullscreen mode Exit fullscreen mode

Hope you learned something new today. Do let me know what do you think about this Dev Tip in the comments below. 👀

Peace. ✌️

Top comments (6)

Collapse
 
dean profile image
dean • Edited

I feel like for consistency, it should be status: 'resolved' rather than status: 'fulfilled'. Otherwise, that's pretty neat!

The concept is great, but some renaming I think would be nice. I think the most important renaming should be status: 'resolved' rather than 'fulfilled', and perhaps renaming Promise.allSettled to something else... Not quite sure yet.

Collapse
 
shahzaibkhalid profile image
Shahzaib Khalid

Dean, the specification uses the following naming convention:

  • fulfilled - The action relating to the promise succeeded
  • rejected - The action relating to the promise failed
  • pending - Hasn't fulfilled or rejected yet
  • settled - Has fulfilled or rejected
Collapse
 
dean profile image
dean

Just looked this up on MDN, didn't know that this was the current specification! Thanks for letting me know.

Collapse
 
anduser96 profile image
Andrei Gatej

Thanks for sharing!

As far as I know, you can achieve the same result with Promise.all by attaching a ‘.catch()’ to each promise in your array.

Collapse
 
shahzaibkhalid profile image
Shahzaib Khalid

Yes, we could but Promise.allSettled is more concise. 🚀

Collapse
 
amcsi profile image
Attila Szeremi⚡

I think you can only handle the first error that way, not the other errors or successes.