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:
- Pending (Függőben): Az aszinkron művelet még nem fejeződött be.
- Fulfilled (Teljesült): Az aszinkron művelet sikeresen befejeződött, és az ígéretnek van egy eredménye.
- 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.