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));
@mariojunior

This comment has been minimized.

Copy link

mariojunior commented Apr 24, 2017

Thanks a lot. I've found your script when I was almost giving up and adding another lib to handle my promise. 👍

@yardensk

This comment has been minimized.

Copy link

yardensk commented Oct 17, 2017

nice

@andrei-cacio

This comment has been minimized.

Copy link

andrei-cacio commented Oct 26, 2017

kudos! Was looking for a solution like this

@titusjin

This comment has been minimized.

Copy link

titusjin commented Dec 23, 2017

awesome!! Thanks lots

@Argo-92

This comment has been minimized.

Copy link

Argo-92 commented Feb 8, 2018

This was a great solution!

@scagood

This comment has been minimized.

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

This comment has been minimized.

Copy link

enapupe commented Jul 16, 2018

@scagood that's beautiful and very useful, ty

@john-doherty

This comment has been minimized.

Copy link

john-doherty commented Aug 19, 2018

Great. Thanks!

@toritsejuFO

This comment has been minimized.

Copy link

toritsejuFO commented Sep 12, 2018

Sweet! 😁

@NishiJain91

This comment has been minimized.

Copy link

NishiJain91 commented Oct 23, 2018

Thanks. This should be inbuilt in ES6.

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