Last active
November 15, 2022 18:11
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
@scagood that's beautiful and very useful, ty
Great. Thanks!
Sweet! 😁
Thanks. This should be inbuilt in ES6.
Inspired from your examples, I created a small library https://www.npmjs.com/package/promise-all-always
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.
awesome!! Thanks lots
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
I added the 'almost' prototype to my promises, using this technique, nice solution.