Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Wait until all promises have completed even when some reject, with Promise.all
var a = ["sdfdf", "http://oooooolol"],
handleNetErr = function(e) { return e };
Promise.all(fetch('sdfdsf').catch(handleNetErr), fetch('http://invalidurl').catch(handleNetErr))
.then(function(sdf, invalid) {
console.log(sdf, invalid) // [Response, TypeError]
})
.catch(function(err) {
console.log(err);
})
Promise.all(a.map(function(e) {
return fetch(e).catch(handleNetErr)
})).then(function(e) {
console.log('then',e) // Outputs: 'then', [Response, TypeError]
}).catch(function(e) {
console.log('err',e)
})
let a = new Promise((res, rej) => res('Resolved!')),
b = new Promise((res, rej) => rej('Rejected!')),
c = a.catch(e => { console.log('"a" failed.'); return e; }),
d = b.catch(e => { console.log('"b" failed.'); return e; });
Promise.all([c, d])
.then((first, second) => console.log('Then', first, second)) // Then ["Resolved!", "Rejected!"]
.catch(err => console.log('Catch', err));
Promise.all([a.catch(e => e), b.catch(e => e)])
.then((first, second) => console.log('Then', first, second)) // Then ["Resolved!", "Rejected!"]
.catch(err => console.log('Catch', err));
@yardensk
Copy link

yardensk commented Oct 17, 2017

nice

@andrei-cacio
Copy link

andrei-cacio commented Oct 26, 2017

kudos! Was looking for a solution like this

@titusjin
Copy link

titusjin commented Dec 23, 2017

awesome!! Thanks lots

@Argo-92
Copy link

Argo-92 commented Feb 8, 2018

This was a great solution!

@scagood
Copy link

scagood commented Mar 12, 2018

Promise.almost = r => Promise.all(r.map(p => p.catch ? p.catch(e => e) : p));

I added the 'almost' prototype to my promises, using this technique, nice solution.

@enapupe
Copy link

enapupe commented Jul 16, 2018

@scagood that's beautiful and very useful, ty

@john-doherty
Copy link

john-doherty commented Aug 19, 2018

Great. Thanks!

@toritsejuFO
Copy link

toritsejuFO commented Sep 12, 2018

Sweet! 😁

@NishiJain91
Copy link

NishiJain91 commented Oct 23, 2018

Thanks. This should be inbuilt in ES6.

@OsoianMarcel
Copy link

OsoianMarcel commented Apr 9, 2019

Inspired from your examples, I created a small library https://www.npmjs.com/package/promise-all-always

@AnthonyD973
Copy link

AnthonyD973 commented May 9, 2019

Very nice. The one downside I see is that, since this forces all promises to resolve, we can't tell whether the output of the promise is an error string or an actual output. That is, not unless we return an object that has a field that tells us whether this output is a rejection or a normal output.

@abrilvg
Copy link

abrilvg commented Nov 4, 2019

awesome!! Thanks lots

@RisingGeek
Copy link

RisingGeek commented May 13, 2020

Instead of using Promise.all() , you can use Promise.allSettled().
Refer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment