Sobes.tech
Junior

Mi az a Promise.race?

sobes.tech MI

Válasz az MI-től

Promise.race — ez egy módszer, amely egy új ígéretet (promise) ad vissza. Ez az új ígéret akkor oldódik meg vagy utasítódik el ugyanazzal az értékkel (vagy okkal), mint az első ígéret a megadott iterálható objektumból (általában tömb), amely befejeződött.

Működési elvek:

  1. Bemenet: Elfogad egy iterálható objektumot (például tömböt) ígéretekkel.
  2. Várakozás: Elkezd egy "versenyt" minden ígéret között.
  3. Eredmény: Amint bármelyik ígéret az iterálható objektumból befejeződik (legyen az megoldott vagy elutasított), a Promise.race azonnal befejeződik ugyanazzal az eredménnyel.
  4. Figyelmen kívül hagyás: Minden más, később befejeződő ígéret eredményei teljesen figyelmen kívül maradnak.

Használati példa:

// Példa egy ígéretre, amely 1 másodperc múlva oldódik meg
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Első'), 1000));

// Példa egy ígéretre, amely 500 milliszekundum múlva oldódik meg
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Második'), 500));

// Példa egy ígéretre, amely 300 milliszekundum múlva elutasításra kerül
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Hiba')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // 'Hiba' fog megjelenni
  })
  .catch((error) => {
    console.error(error.message); // A hiba kezelése 'Hiba'
  });

Ebben a példában a promise3 lesz az első, amely befejeződik (elutasítva), így a Promise.race hibával fejeződik be, és a .catch blokk fut le. Ha a promise2 lenne az első (például 10 ms alatt), akkor a Promise.race az értékkel 'Második' oldódna meg, és a .then blokk futna le.

Tipikus felhasználási forgatókönyvek:

  • Időkorlát beállítása egy aszinkron művelethez.
  • A leggyorsabb adatforrás eredményének megszerzése több közül.
  • Aszinkron műveletek versengésének megszakítása.