Junior
Какво е Promise.race?
sobes.tech AI
Отговор от AI
Promise.race — това е метод, който връща ново обещание (promise). Това ново обещание се разрешава или отхвърля със същата стойност (или причина), като първото обещание от предадения итерируем обект (обикновено масив), което е завършило.
Принципи на работа:
- Вход: Приема итерируем обект (например масив) от обещания.
- Очакване: Започва "състезание" между всички обещания.
- Резултат: Веднага щом някое от обещанията в итерируемия обект се завърши (или разреши, или отхвърли),
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.
Типични сценарии за използване:
- Реализация на таймаут за асинхронна операция.
- Получаване на резултат от най-бързия източник на данни сред няколко възможни.
- Отмяна на конкуриращи се асинхронни операции.