Promise.allSettled
The Promise object has many useful functions like all
, resolve
, reject
, and race
-- stuff we use all the time. One function that many don't know about is Promise.allSettled
, a function that fires when all promises in an array are settled, regardless of whether any of the promises are resolved or rejected.
Promise.all
is great but then
isn't called if a project is rejected:
Promise.all([ Promise.resolve(1), Promise.resolve(true), Promise.reject("Boooooo"), ]) .then(_ => console.log("Then!")) .catch(e => console.log("catch!")); // Catch!
There are always going to be cases where you'd like to run the then
function regardless of individual results -- think hiding a spinner image at the end of multiple fetch requests; that's where Promise.allSettled
comes in:
Promise.allSettled([ Promise.resolve(1), Promise.resolve(true), Promise.reject("Boooooo"), ]) .then(promiseResults => console.log("Then! ", promiseResults)) .catch(e => console.log("catch!")); /* Then! [ { status: "fulfilled", value: 1 }, { status: "fulfilled", value: true }, { status: "rejected", reason: "Boooooo" } ] */
Promise.allSettled
is awesome -- certainly much better than an old shim floating around years ago. Between all
, allSettled
, and race
, as well as the ability to cancel fetch
requests, we've almost got every aspect of Promises covered!
I think the rejected results in the last code block should be:
My only problem with this approach is that the
.catch
block never gets called withPromise.allSettled()
Yes, that is import! Thank you Michel! Please correct that David.
So with
allSettled
is the.catch
handler deprecated? When is it hit? Same with theonRejected
param tothen
?