Sobes.tech
Junior

Čo je Promise.race?

sobes.tech AI

Odpoveď od AI

Promise.race — je metóda, ktorá vracia nový sľub. Tento nový sľub je vyriešený alebo zamietnutý s rovnakou hodnotou (alebo dôvodom) ako prvý sľub z odovzdaného iterovateľného objektu (zvyčajne pole), ktorý bol dokončený.

Princípy fungovania:

  1. Vstup: Prijíma iterovateľný objekt (napríklad pole) sľubov.
  2. Čakanie: Začína "súťaž" medzi všetkými sľubmi.
  3. Výsledok: Hneď ako ktorýkoľvek z sľubov v iterovateľnom objekte je dokončený (buď vyriešený alebo zamietnutý), Promise.race okamžite končí rovnakým výsledkom.
  4. Ignorovanie: Výsledky všetkých ostatných sľubov, ktoré sa dokončia neskôr, sú úplne ignorované.

Príklad použitia:

// Príklad sľubu, ktorý sa vyrieši po 1 sekunde
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Prvý'), 1000));

// Príklad sľubu, ktorý sa vyrieši po 500 milisekundách
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Druhý'), 500));

// Príklad sľubu, ktorý je zamietnutý 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); // Spracuje chybu 'Chyba'
  });

V tomto príklade, promise3 sa dokončí ako prvá (zamietnutá), takže Promise.race sa ukončí chybou a vykoná sa blok .catch. Ak by promise2 bola dokončená prvá (napríklad za 10 ms), potom by Promise.race bola vyriešená s hodnotou 'Druhý' a vykonal by sa blok .then.

Typické scenáre použitia:

  • Implementácia časového limitu pre asynchrónnu operáciu.
  • Získanie výsledku z najrýchlejšieho zdroja dát medzi viacerými možnosťami.
  • Zrušenie konkurenčných asynchrónnych operácií.