Skip to content

Instantly share code, notes, and snippets.

@nhagen
Last active November 15, 2022 18:11
Show Gist options
  • 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));
@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