Promise

A Promise egy JavaScript objektum, amely aszinkron műveletek eredményével vagy hibájával kapcsolatos jövőbeni értéket reprezentál. A Promise lehetővé teszi az aszinkron műveletek kezelését egy rendezett és könnyen érthető módon, elkerülve az úgynevezett “callback hell” problémáját.

Egy Promise az alábbi három állapot egyikében van:

  1. Pending (Függőben): Az aszinkron művelet még nem fejeződött be.
  2. Fulfilled (Teljesült): Az aszinkron művelet sikeresen befejeződött, és az ígéretnek van egy eredménye.
  3. Rejected (Elutasítva): Az aszinkron művelet hibával fejeződött be.

A promise-ok használatakor az alábbi metódusok a leggyakrabban használtak:

  • then(): Ezzel a metódussal hozzáadhatunk callbackeket, amelyeket akkor hívunk meg, ha az ígéret teljesült vagy elutasítva lett. Két függvényt adhatunk át neki: az első a teljesülés esetén hívódik meg, a második az elutasítás esetén.
  • catch(): Ezzel a metódussal kezelhetjük az ígéret által dobott hibákat.
  • finally(): Egy callbacket adhatunk meg, amelyet a promise állapotától függetlenül meghív.

Példa:

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    if (Math.random() > 0.5) {
      resolve('Sikeres eredmény');
    } else {
      reject('Hiba történt');
    }
  }, 1000);
});

myPromise
  .then(result => {
    console.log(result);  // 'Sikeres eredmény', ha a Promise teljesült
  })
  .catch(error => {
    console.error(error);  // 'Hiba történt', ha a Promise elutasítva lett
  })
  .finally(() => {
    console.log('Az ígéret lefutott.');
  });

Ezen kívül vannak beépített statikus metódusok is, mint a Promise.all(), Promise.race(), Promise.resolve() és Promise.reject(), amelyek további funkciókat kínálnak az ígéretek kezeléséhez.

Míg a promise-ok nagyon hasznosak az aszinkron kód kezelésében, a modern JavaScript fejlesztők gyakran az async/await szintaxist részesítik előnyben, amely egy deklaratívabb és olvashatóbb módja az aszinkron műveletek kezelésének, miközben a háttérben promise-okat használ.

Was this page helpful?