Sobes.tech
Junior

Šta je Promise.race?

sobes.tech АИ

Одговор од АИ

Promise.race — metoda koja vraća novi obećanje. Ovo novo obećanje se rešava ili odbacuje sa istom vrednošću (ili razlogom) kao i prvo obećanje iz prosleđenog iterabilnog objekta (obično niz) koji je završen.

Principi rada:

  1. Ulaz: Prihvata iterabilni objekat (npr. niz) obećanja.
  2. Očekivanje: Počinje "takmičenje" između svih obećanja.
  3. Rezultat: Čim bilo koje od obećanja u iterabilnom objektu bude završeno (bilo da je rešeno ili odbačeno), Promise.race se odmah završava istim rezultatom.
  4. Ignorisanje: Rezultati svih ostalih obećanja koja se završe kasnije, potpuno se ignorišu.

Primer upotrebe:

// Primer obećanja koje se rešava nakon 1 sekunde
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Prvi'), 1000));

// Primer obećanja koje se rešava nakon 500 milisekundi
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Drugi'), 500));

// Primer obećanja koje se odbacuje nakon 300 milisekundi
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Greška')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Ispisaće 'Greška'
  })
  .catch((error) => {
    console.error(error.message); // Obrada greške 'Greška'
  });

U ovom primeru, promise3 se završava prvi (odbijen), pa će Promise.race biti završeno greškom, i biće izvršen blok .catch. Da je promise2 završio prvi (npr. za 10 ms), Promise.race bi se rešio sa vrednošću 'Drugi', i izvršio bi se blok .then.

Tipični scenariji upotrebe:

  • Implementacija timeout-a za asinhronu operaciju.
  • Dobijanje rezultata od najbržeg izvora podataka među više mogućnosti.
  • Otkazivanje konkurentnih asinhronih operacija.