Skip to content

Instantly share code, notes, and snippets.

@nhagen
Last active November 15, 2022 18:11
Show Gist options
  • Star 93 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save nhagen/a1d36b39977822c224b8 to your computer and use it in GitHub Desktop.
Save nhagen/a1d36b39977822c224b8 to your computer and use it in GitHub Desktop.
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));
@john-doherty
Copy link

Great. Thanks!

@toritsejuFO
Copy link

Sweet! 😁

@NishiJain91
Copy link

Thanks. This should be inbuilt in ES6.

@OsoianMarcel
Copy link

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

@adentinger
Copy link

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

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