3 ms·
> I was reading the MDN docs on JavaScript promises and realized that the difference between Promise.all and Promise.allSettled wasn’t immediately obvious. Rea
by rockostrich 6y ago
> I was reading the MDN docs on JavaScript promises and realized that the difference between Promise.all and Promise.allSettled wasn’t immediately obvious.
Really? I haven't dealt with JavaScript in a while so I took a look at the MDN docs and it seems pretty obvious.
> The Promise.all() method returns a single Promise that fulfills when all of the promises passed as an iterable have been fulfilled
and
> The Promise.allSettled() method returns a promise that resolves after all of the given promises have either fulfilled or rejected, with an array of objects that each describes the outcome of each promise.
`all` flattens all of the promises in a single promise containing an array of their results while `allSettled` flattens the promises into a single promise containing an array of objects that contain the resulting value as well as the status (which is either fulfilled or rejected).
The one catch that's not immediately obvious is pointed out by the article which is that `all` will resolve on the first rejected promise. Except that's also in the first paragraph of the doc:
>It rejects with the reason of the first promise that rejects
- eloff 6y agoI've never heard of allSettled, but the difference seems clear to me. However, I think you would usually want the semantics of Promise.all, allSettled seems more for niche use cases.
- proto-n 6y agoHaven't heard of it before either, but had to recreate the functionality before. Which is not all that hard using Promise.all
- locallost 6y agoIf you add a .catch to a promise, then it will never reject, so you get this with .all also. I'd also never heard of .allSettled which is a pity because I need it frequently. For instance when I have a bunch of requests that run in parallel, and I don't really care if they all succeed, just that they are all complete.
- mekane8 6y ago"Really?" was my first reaction too. The difference may be a bit subtle but it's quite clear. I remember when I was learning promises there was lots of talk in the tutorials, etc. about .all() and I eventually had a use case where I wanted to know the statuses of a bunch of calls and didn't really care whether they were failures or not and I found Q.allSettled() which was perfect. Good old Q.
- eximius 6y agoSubtle is literally an antonym for obvious. It can't be both. I think it is a clear, subtle difference, making it easy to miss by mistake and be surprised by it. Lack of ambiguity does not preclude surprise.