Sobes.tech
Junior

Kas ir Promise.race?

sobes.tech AI

Atbilde no AI

Promise.race — tas metodes, kas atgriež jaunu solījumu. Šis jauns solījums tiek apstiprināts vai noraidīts ar to pašu vērtību (vai iemeslu), kā pirmais nodots un iterējams objekts (parasti masīvs), kas ir noslēdzies.

Darba principi:

  1. Ievads: Pieņem iterējamu objektu (piemēram, masīvu) ar solījumiem.
  2. Gaidīšana: Sāk "sacensību" starp visiem solījumiem.
  3. Rezultāts: Tiklīdz kāds no solījumiem iterējamajā objektā beidzas (vai tiek apstiprināts, vai noraidīts), Promise.race momentāni beidzas ar to pašu rezultātu.
  4. Ignorēšana: Visi citi rezultāti, kas beidzas vēlāk, tiek pilnībā ignorēti.

Piemērs lietošanai:

// Piemērs solījumam, kas tiek apstiprināts pēc 1 sekundes
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Pirmais'), 1000));

// Piemērs solījumam, kas tiek apstiprināts pēc 500 milisekundēm
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Otrais'), 500));

// Piemērs solījumam, kas tiek noraidīts pēc 300 milisekundēm
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Kļūda')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Izvadīs 'Kļūda'
  })
  .catch((error) => {
    console.error(error.message); // Apstrādās kļūdu 'Kļūda'
  });

Šajā piemērā promise3 beigsies pirmā (noraidīta), tāpēc Promise.race beigsies ar kļūdu un izpildīs .catch bloku. Ja promise2 būtu pabeidzies pirmā (piemēram, 10 ms), tad Promise.race būtu apstiprināts ar vērtību un izpildītu .then bloku.

Tipiskie lietošanas scenāriji:

  • Asinhroniskas operācijas laika ierobežojuma noteikšana.
  • Rezultāta iegūšana no visātrākās datu avota starp vairākiem.
  • Konkurējošo asinhrono operāciju atcelšana.