Promise.any и Promise.race похожи тем, что оба работают с набором промисов, но отличаются по логике:
Чем отличается Promise.any от Promise.race?
Promise.any и Promise.race похожи тем, что оба работают с набором промисов, но отличаются по логике:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Promise.any и Promise.race похожи тем, что оба работают с набором промисов, но отличаются по логике:
- Promise.race возвращает результат первого промиса, который завершится — будь то успешно или с ошибкой. То есть, как только любой из промисов выполнится или отклонится,
raceзавершится с этим результатом. - Promise.any возвращает результат первого успешно выполненного промиса. Если все промисы отклоняются, тогда
anyотклоняется с AggregateError.
Пример:
const p1 = new Promise((_, reject) => setTimeout(() => reject('Ошибка'), 100));
const p2 = new Promise(resolve => setTimeout(() => resolve('Успех'), 200));
Promise.race([p1, p2])
.then(console.log) // Выведет 'Ошибка' через 100ms
.catch(console.error);
Promise.any([p1, p2])
.then(console.log) // Выведет 'Успех' через 200ms
.catch(console.error);
Таким образом, race реагирует на первый завершившийся промис, а any — на первый успешный.