Sobes.tech
Junior

Какво е Promise.race?

sobes.tech AI

Отговор от AI

Promise.race — това е метод, който връща ново обещание (promise). Това ново обещание се разрешава или отхвърля със същата стойност (или причина), като първото обещание от предадения итерируем обект (обикновено масив), което е завършило.

Принципи на работа:

  1. Вход: Приема итерируем обект (например масив) от обещания.
  2. Очакване: Започва "състезание" между всички обещания.
  3. Резултат: Веднага щом някое от обещанията в итерируемия обект се завърши (или разреши, или отхвърли), Promise.race незабавно приключва с същия резултат.
  4. Игнориране: Резултатите на всички други обещания, които се завършват по-късно, се игнорират напълно.

Пример за използване:

// Пример за обещание, което се разрешава след 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.

Типични сценарии за използване:

  • Реализация на таймаут за асинхронна операция.
  • Получаване на резултат от най-бързия източник на данни сред няколко възможни.
  • Отмяна на конкуриращи се асинхронни операции.