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'));
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!'
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'} ] 🚀
*/
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)
I feel like for consistency, it should be
status: 'resolved'
rather thanstatus: '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 renamingPromise.allSettled
to something else... Not quite sure yet.Dean, the specification uses the following naming convention:
Just looked this up on MDN, didn't know that this was the current specification! Thanks for letting me know.
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.
Yes, we could but
Promise.allSettled
is more concise. 🚀I think you can only handle the first error that way, not the other errors or successes.