Skip to content
Az oldal tartalma

Promise-ok

Bevezetés

A Promise egy különleges osztály a ES-ben. A célja, hogy tudjunk olyan adatokkal, dolgozni, amelyek nem feltétlenül állnak rendelkezésre azonnal. Ebből kifolyólag egy Promise-nak 3 állapota lehet:

  1. pending: Az adatra még várni kell
  2. fulfilled: Sikerült megszerezni a megfelelő adatot
  3. rejected: Valami hiba történt

A következőképp fog ez nekünk kódban kinézni:

JavaScript
let promise = new Promise((resolve,reject) => {})

A Promise mindig egy függvényt kér paraméternek amit megadhatünk így nyílfüggvényként, vagy a következőképpen referenciaként is:

JavaScript
let promise = new Promise(func)

function func(resolve,reject)
{

}

A lényeg, hogy a függvényünk ezzel a két paraméterrel rendelkezzen.

Innentől a függvényünk törzsében megvalósíthatjük a tetszőleges logikát, ami a resolve és a reject paramétereket fogja felhasználni.

Például kérjünk egy random számot és ha páros, akkor sikerült teljesíteni a Promise-t, ha páratlan akkor nem.

JavaScript
let promise = new Promise(func);

function func(resolve,reject)
{
    let random = Math.random();
    if(random % 2 == 0)
    {
        resolve("Paros");
    }
    else{
        reject("Paratlan");
    }
}

Most, hogy megvan a Promise-unk, már csak fel kellene tudnunk használni. Az elkészült változónkon fogunk tudni két függvényt h1vni, a then()-t és a catch()-t. Az előbbi akkor fog lefutni, ha sikeresen teljesült a Promise, az utóbbi pedig amikor meghiusult. Nézzük meg a gyakorlatban:

JavaScript
promise.then((uzenet) => "Sikerult a Promise: " + uzenet).catch((uzenet)=>"Meghiusult a Promise: " + uzenet);

Információ

A fenti példában a nyílfüggvények ugyanúgy sima függvényre cserélhetőek, mint a Promise() esetén.

Ellenőrző kérdések

  1. Milyen állapotai lehetnek egy Promise-nak?
  2. Mikor fog a .then() lefutni?
  3. Hogyan érhető el, hogy a .catch() fusson le?
  4. A resolve() és a reject() milyen paramétereket kaphat?
  5. Hogyan adjuk meg a két függvényt Promise számára?
\pagebreak

A tananyag jelenlegi verziója: 4.0.0