Назад к вопросам
Junior
105
questionbank
Расскажи о том, что такое Promise.race?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Promise.race — это метод, который возвращает новый промис. Этот новый промис разрешается или отклоняется с тем же значением (или причиной), что и первый промис из переданного итерируемого объекта (обычно массива), который завершился.
Принципы работы:
- Вход: Принимает итерируемый объект (например, массив) промисов.
- Ожидание: Начинает "состязание" между всеми промисами.
- Результат: Как только любой из промисов в итерируемом объекте завершается (либо разрешается, либо отклоняется),
Promise.raceмгновенно завершается с тем же результатом. - Игнорирование: Результаты всех других промисов, завершившихся позже, полностью игнорируются.
Пример использования:
// Пример промиса, который разрешается через 1 секунду
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Первый'), 1000));
// Пример промиса, который разрешается через 500 миллисекунд
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Второй'), 500));
// Пример промиса, который отклоняется через 300 миллисекунд
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Ошибка')), 300));
Promise.race([promise1, promise2, promise3])
.then((value) => {
console.log(value); // Выведет 'Ошибка'
})
.catch((error) => {
console.error(error.message); // Обработает ошибку 'Ошибка'
});
В этом примере promise3 завершается первым (отклоняется), поэтому Promise.race завершится с ошибкой, и выполнится блок .catch. Если бы promise2 завершился первым (например, за 10ms), то Promise.race разрешился бы со значением 'Второй', и выполнился бы блок .then.
Типичные сценарии использования:
- Реализация таймаута для асинхронной операции.
- Получение результата из самого быстрого источника данных среди нескольких возможных.
- Отмена конкурирующих асинхронных операций.