Sobes.tech
Junior

Kas yra Promise.race?

sobes.tech AI

Atsakymas iš AI

Promise.race — tai metodas, kuris grąžina naują pažadą. Šis naujas pažadas yra išsprendžiamas arba atmestas su tuo pačiu reikšme (arba priežastimi), kaip ir pirmasis perduotas ir iteruojamas objektas (dažniausiai masyvas), kuris baigėsi.

Veikimo principai:

  1. Įėjimas: priima iteruojamą objektą (pavyzdžiui, masyvą) pažadams.
  2. Laukimas: pradeda "svarstymą" tarp visų pažadų.
  3. Rezultatas: kai bet kuris iš pažadų iteruojamame objekte baigiasi (arba išsprendžiamas, arba atmestas), Promise.race akimirksniu baigiasi su tuo pačiu rezultatu.
  4. Ignoravimas: visi kiti pažadų rezultatai, kurie baigiasi vėliau, visiškai ignoruojami.

Naudojimo pavyzdys:

// Pavyzdys pažado, kuris išsprendžiamas po 1 sekundės
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Pirmas'), 1000));

// Pavyzdys pažado, kuris išsprendžiamas po 500 milisekundžių
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Antras'), 500));

// Pavyzdys pažado, kuris atmestas po 300 milisekundžių
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Klaida')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Išves 'Klaida'
  })
  .catch((error) => {
    console.error(error.message); // Apdoros klaidą 'Klaida'
  });

Šiame pavyzdyje promise3 baigsis pirmas (atmestas), todėl Promise.race baigsis klaida ir įvykdys .catch bloką. Jei promise2 baigtųsi pirmas (pavyzdžiui, per 10 ms), Promise.race būtų išspręstas reikšme ir įvykdytų .then bloką.

Tipinės naudojimo scenarijos:

  • Asinchroninės operacijos laiko nustatymas.
  • Gauti greičiausio duomenų šaltinio rezultatą tarp kelių galimų.
  • Konkurencingų asinchroninių operacijų atšaukimas.