В чем разница между Promise.all и Promise.any
1️⃣ Как кратко ответить
Promise.all ожидает завершения всех переданных промисов и возвращает массив их результатов, либо отклоняется при первом же отклоненном промисе. Promise.any возвращает результат первого успешно завершенного промиса, игнорируя отклоненные, и отклоняется только если все промисы отклонены.
2️⃣ Подробное объяснение темы
Promise.all и Promise.any — это методы, которые позволяют работать с множеством промисов одновременно, но они имеют разные подходы к обработке результатов и ошибок.
Promise.all
Promise.all принимает массив промисов и возвращает новый промис. Этот промис:
- Разрешается, когда все промисы в массиве успешно завершены. В этом случае он возвращает массив результатов в том же порядке, в котором были переданы промисы.
- Отклоняется, если хотя бы один из промисов отклоняется. В этом случае он возвращает причину отклонения первого промиса, который отклонился.
Пример использования Promise.all:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values); // [3, 42, "foo"]
}).catch((error) => {
console.error(error);
});
promise1иpromise2разрешаются сразу.promise3разрешается через 100 миллисекунд.- Promise.all ждет завершения всех промисов и возвращает их результаты в массиве.
Promise.any
Promise.any также принимает массив промисов и возвращает новый промис. Этот промис:
- Разрешается, когда любой из переданных промисов успешно завершен. Он возвращает результат первого успешно завершенного промиса.
- Отклоняется, если все промисы отклонены. В этом случае он возвращает AggregateError, содержащий все причины отклонения.
Пример использования Promise.any:
const promise1 = Promise.reject('Error 1');
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'Success');
});
const promise3 = Promise.reject('Error 3');
Promise.any([promise1, promise2, promise3]).then((value) => {
console.log(value); // "Success"
}).catch((error) => {
console.error(error);
});
promise1иpromise3отклоняются сразу.promise2разрешается через 100 миллисекунд.- Promise.any возвращает результат
promise2, так как это первый успешно завершенный промис.
Зачем это нужно и где применяется
- Promise.all полезен, когда необходимо дождаться завершения всех операций, например, загрузки нескольких ресурсов, перед тем как продолжить выполнение программы.
- Promise.any подходит для случаев, когда достаточно получить первый успешный результат, например, при обращении к нескольким зеркалам сервера для получения данных.
Оба метода помогают управлять асинхронными операциями, делая код более читаемым и управляемым.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться