ES2021 introduced any and race methods to the Promise class.
The promise resolves to the following states
pendingis the initial value not fulfilled or rejectedfulfilled- settled with a successful resultrejected- rejected with an error result
ES2020 introduced [Promise. all](/settled /javascript/es11-promise-allsettled) that is used to run multiple promises parallelly and return the result when all promises are either fulfilled or rejected.
SO any method in the promise is also applied to an array of promises.
When one of the promises is successfully fulfilled, all other promises in an array are fulfilled as rejected.
The racing method allows returning the response.
- when one of the promises is settled successfully, that means these promises can either be rejected or fulfilled.
Promise.any example
let’s create two promise object which resolves in 1 and 2 seconds
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => resolve("one done"), 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve("two done"), 2000);
});
And the result is all promises are resolved
(async function () {
const promiseStatus = await Promise.any([promise1, promise2]);
console.log(promiseStatus); // Prints "one done", "two done"
})();
AggregateError error is thrown if none of the promises is resolved or rejected.
Promise.race example
In this example, One of the promises is rejected and race is resolved to be rejected with an error.
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => reject("failed"), 1000m new Error('Fail'));
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve("two done"), 2000);
});
Promise.race returns
Promise.race([promise1, promise2]).then(
value => {
console.log(`fullfilled`);
},
reason => {
console.log(`rejected`);
}
);
output
rejected