promise-methods
****# Promise Methods
Promise.race
Promise.myRace = function (promises) {
return new Promise((resolve, reject) => {
promises.forEach((promise) => {
promise
.then((val) => {
resolve(val);
})
.catch((error) => {
reject(error);
});
});
});
};
Promise.any
Promise.myAny = function (promises) {
return new Promise((resolve, reject) => {
let count = 0;
promises.forEach((promise) => {
promise
.then((val) => {
resolve(val);
})
.catch(() => {
count += 1;
})
.finally(() => {
if (count === promises.length) reject('all promises rejected');
});
});
});
};
Promise.all
Promise.myAll = function (promises) {
return new Promise((resolve, reject) => {
const output = [];
let count = 0;
promises.forEach((promise, index) => {
promise
.then((val) => {
count += 1;
output[index] = val;
})
.catch((error) => {
reject(error);
})
.finally(() => {
if (promises.length === count) resolve(output);
});
});
});
};
Promise.allSettled
Promise.myAllSettled = function (promises) {
return new Promise((resolve) => {
const output = [];
let count = 0;
promises.forEach((promise, index) => {
promise
.then((value) => {
output[index] = {
status: 'fulfilled',
value,
};
})
.catch((error) => {
output[index] = {
status: 'rejected',
error,
};
})
.finally(() => {
count += 1;
if (count === promises.length) {
resolve(output);
}
});
});
});
};