Promise.allSettled() Polyfill
The Promise.allSettled() method returns a promise that fulfills after all of the given promises have either fulfilled or rejected, with an array of objects that each describes the outcome of each promise.
Promise.allSettledPolyfill = (promises) => {
let pending = promises.length;
const results = [];
return new Promise((resolve, reject) => {
promises.forEach((promise, promiseIndex) => {
promise
.then((value) => {
results[promiseIndex] = {
status: "fulfilled",
value: value,
};
})
.catch((error) => {
results[promiseIndex] = {
status: "rejected",
value: error,
};
})
.finally(() => {
pending--;
if (pending === 0) {
resolve(results);
}
});
});
});
};
Example
Promise.allSettledPolyfill = (promises) => {
let pending = promises.length;
const results = [];
return new Promise((resolve, reject) => {
promises.forEach((promise, promiseIndex) => {
promise
.then((value) => {
results[promiseIndex] = {
status: "fulfilled",
value: value,
};
})
.catch((error) => {
results[promiseIndex] = {
status: "rejected",
value: error,
};
})
.finally(() => {
pending--;
if (pending === 0) {
resolve(results);
}
});
});
});
};
const a = new Promise((resolve) => resolve(3));
const b = new Promise((resolve, reject) => reject(9));
const c = new Promise((resolve) => resolve(5));
Promise.allSettledPolyfill([a, b, c]).then((val) => {
console.log(val);
});