Az async
, await
és a Promise
kulcsfontosságú eszközök a JavaScript-ben az aszinkron műveletek kezelésére. Ezek segítségével az aszinkron kódot szinkron stílusban írhatjuk meg, ami átláthatóbbá és könnyebben karbantarthatóvá teszi a kódot.
Az async
, await
és a Promise
előnyei:
- Olvashatóság: Szinkron stílusú kód írása aszinkron feladatokhoz.
- Hatékonyság: Nem blokkolják a fő szálat, támogatják a párhuzamos feldolgozást.
- Egyszerű hibakezelés: Könnyű és átlátható megoldás a hibák kezelésére.
- Modularitás: Az egyes komponensek könnyen újrafelhasználhatók és tesztelhetők.
- Széles támogatottság: A JavaScript szabvány részét képezik, és a legtöbb modern környezet támogatja őket.
Promise
A Promise
egy olyan objektum, amely egy később teljesülő (vagy elutasított) értéket reprezentál. Alap szinten kezeli az aszinkron kódot, láncolással (.then
, .catch
) érjük el az eredményt vagy kezeljük a hibát:
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { const success = true; // Próbáljuk ki true és false értékkel if (success) { resolve("Adat sikeresen betöltve!"); } else { reject("Hiba történt az adatok betöltése közben."); } }, 2000); }); } fetchData() .then((data) => console.log(data)) // Ha sikeres, itt kapjuk meg az adatot .catch((error) => console.error(error)); // Ha hiba történik, itt kezeljük
Async/Await
Az async
kulcsszóval ellátott függvény mindig egy Promise
-t ad vissza. Az await
kulcsszó pedig azt jelzi, hogy meg kell várni egy Promise teljesülését, mielőtt a következő művelet végrehajtódik. Szinkron stílusban írható meg az aszinkron kód, ami tisztább és könnyebben olvashatóvá teszi:
async function getData() { try { console.log("Adatok betöltése..."); const data = await fetchData(); // Várja a fetchData Promise teljesülését console.log(data); } catch (error) { console.error(error); // Ha hiba történik, itt kezeljük } } getData();
// Promise verzió fetchData().then(console.log).catch(console.error); // Async/Await verzió (async () => { try { const result = await fetchData(); console.log(result); } catch (error) { console.error(error); } })();