Sobes.tech
Junior

Co je Promise.race?

sobes.tech AI

Odpověď od AI

Promise.race — je metoda, která vrací nový slib. Tento nový slib je vyřešen nebo zamítnut se stejnou hodnotou (nebo příčinou) jako první slib z předaného iterovatelného objektu (obvykle pole), který byl dokončen.

Principy fungování:

  1. Vstup: Přijímá iterovatelný objekt (například pole) slibů.
  2. Čekání: Začíná "závod" mezi všemi sliby.
  3. Výsledek: Jakmile kterýkoli z slibů v iterovatelném objektu je dokončen (buď vyřešen nebo zamítnut), Promise.race okamžitě končí stejným výsledkem.
  4. Ignorování: Výsledky všech ostatních slibů, které se dokončí později, jsou zcela ignorovány.

Příklad použití:

// Příklad slibu, který se vyřeší po 1 sekundě
const promise1 = new Promise((resolve) => setTimeout(() => resolve('První'), 1000));

// Příklad slibu, který se vyřeší po 500 milisekundách
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Druhý'), 500));

// Příklad slibu, který je zamítnut po 300 milisekundách
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Chyba')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Zobrazí 'Chyba'
  })
  .catch((error) => {
    console.error(error.message); // Zpracuje chybu 'Chyba'
  });

V tomto příkladu se promise3 dokončí jako první (zamítnutí), takže Promise.race se ukončí chybou a spustí se blok .catch. Pokud by promise2 byla dokončena jako první (například za 10 ms), Promise.race by se vyřešila s hodnotou 'Druhý' a spustil by se blok .then.

Typické scénáře použití:

  • Implementace časového limitu pro asynchronní operaci.
  • Získání výsledku z nejrychlejšího zdroje dat mezi několika možnými.
  • Zrušení konkurenčních asynchronních operací.