Вопрос проверяет понимание метода Promise.race, который используется для работы с несколькими промисами одновременно, чтобы получить результат самого быстрого из них.
Promise.race — это мощный инструмент для управления асинхронными операциями в JavaScript, позволяющий реагировать на результат самого быстрого из нескольких промисов.
Метод принимает итерируемый объект (чаще всего массив) промисов. Он немедленно возвращает новый промис. Этот новый промис "связывается" с судьбой первого промиса из переданного списка, который перейдёт в состояние fulfilled (выполнен) или rejected (отклонён). Как только любой из исходных промисов завершается, результат (значение или причина ошибки) передаётся в возвращённый промис от race, и все остальные промисы игнорируются в контексте этого вызова.
// Полезная асинхронная операция (например, fetch)
const fetchData = fetch('https://api.example.com/data');
// Промис, который отклоняется через 5 секунд
const timeout = new Promise((_, reject) => {
setTimeout(() => reject(new Error('Request timeout')), 5000);
});
// Гонка между запросом и таймаутом
Promise.race([fetchData, timeout])
.then(response => {
console.log('Данные получены:', response);
})
.catch(error => {
console.error('Ошибка или таймаут:', error.message);
});В этом примере, если fetchData завершится раньше 5 секунд, в then попадёт его результат. Если же запрос длится дольше, сработает таймаут, и выполнится блок catch с ошибкой "Request timeout".
Promise.all (который ждёт всех) и Promise.any (который ждёт первого успешного).Вывод: Используйте Promise.race, когда вам критично время отклика и нужно реагировать на самый быстрый результат, особенно для реализации таймаутов или выбора оптимального источника данных в конкурентных сценариях.