The any (Promise.any()) method of Promise object takes multiple promises as an iterable as its input and return a promise.

The returned promise from the any method will be

  • rejected if the passed iterable is empty
  • rejected if the all the passed promises gets rejected
  • resolved as soon as any passed promise gets resolved
  • resolved as soon as it comes across any non-promise static value

The any method can be very useful especially when you have same data stored at multiple places at wants to fetch it as soon as possible from any source.

Examples:

Resolves as soon as any passed promise gets resolved

let promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Resolved 1');
    }, 5000);
});


let promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Resolved 2');
    }, 1000);
});

let anyPromise = Promise.any([promise1, promise2]);

anyPromise.then((data) => {
    console.log(data); // we get Resolved 2
}).catch((error) => {
    console.log(error);
})

 

Resolves even when a passed promise gets rejected first and another promise gets resolved later

let promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Resolved');
    }, 5000);
});


let promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('Rejected');
    }, 1000);
});

let anyPromise = Promise.any([promise1, promise2]);

anyPromise.then((data) => {
    console.log(data); // we get Resolved after 5 secs
}).catch((error) => {
    console.log(error);
})

 

Resolves immediately when it comes across any non-promise static value

Promise.any(['A String: How to JS', Promise.resolve('Promise')]).then((data) => {
    console.log(data); // we A String: How to JS
}).catch((error) => {
    console.log(error);
})

 

Rejected if the passed iterable is empty

Promise.any([]).then((data) => {
    console.log(data);
}).catch((error) => {
    console.log(error); // we get [AggregateError: All promises were rejected]
})