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:
pending: Az adatra még várni kellfulfilled: Sikerült megszerezni a megfelelő adatotrejected: Valami hiba történt
A következőképp fog ez nekünk kódban kinézni:
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:
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.
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:
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
- Milyen állapotai lehetnek egy
Promise-nak? - Mikor fog a
.then()lefutni? - Hogyan érhető el, hogy a
.catch()fusson le? - A
resolve()és areject()milyen paramétereket kaphat? - Hogyan adjuk meg a két függvényt
Promiseszámára?
\pagebreak