Mi az a callback?
A callback egy függvény, amelyet egy másik függvény paramétereként adunk át. A
callback célja, hogy egy művelet befejezése után további kódot futtassunk.
Callback-eket gyakran használunk aszinkron műveletek, például hálózati kérések
vagy időzített feladatok kezelésére.
Hogyan működik?
Amikor egy aszinkron műveletet végzünk, például egy adat lekérdezést az
API-ból, nem várhatjuk el, hogy azonnal befejeződjön. Ehelyett, amikor az
adatokat betöltöttük, a callback függvény hívódik meg, amely a művelet
befejeződése után fut le.
Példa:
function fetchData(callback) { setTimeout(() => { console.log('Adatok betöltve'); callback(); // Callback meghívása }, 1000); // 1 másodperces késleltetés} function onDataLoaded() { console.log('A callback függvény végrehajtása');} // fetchData hívása a onDataLoaded callback-kelfetchData(onDataLoaded);
Magyarázat:
A fetchData függvény 1
másodpercet vár, majd kiírja, hogy "Adatok betöltve". Ezután meghívja
a callback függvényt, amely
a onDataLoaded-ként lett
átadva, így kiírja, hogy "A callback függvény végrehajtása".
9.2 Promises
Mi az a Promise?
A Promise egy objektum, amely egy aszinkron művelet jövőbeli eredményét vagy
hibáját képviseli. Három állapota van:
- Pending (függőben lévő):
Az ígéret még nem teljesült, és nem is lett elutasítva.
- Fulfilled (teljesült): Az
ígéret sikeresen teljesült, és az eredmény elérhető.
- Rejected (elutasított): Az
ígéret nem teljesült, és egy hibaüzenet érhető el.
Hogyan működik?
A Promise-t akkor használjuk, amikor egy aszinkron műveletet szeretnénk
végrehajtani és kezelni szeretnénk a sikeres és sikertelen befejeződést is.
Példa:
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { const success = true; // Simulált siker if (success) { console.log('Adatok betöltve'); resolve(); // Promise teljesült } else { reject('Hiba történt'); // Promise elutasítva } }, 1000); });} // fetchData hívása és Promise kezelésefetchData() .then(() => { console.log('A Promise sikeresen teljesült'); }) .catch(error => { console.error('Hiba:', error); });
Magyarázat:
A fetchData függvény egy új
Promise-t ad vissza. A setTimeout
után, ha a success érték true, akkor a Promise teljesül, és a .then() blokk fut le. Ha a success érték false, a Promise elutasításra kerül, és
a .catch() blokk fut le.
9.3 Async/Await
Mi az az async/await?
Az async és await a Promise-ek egyszerűsített
kezelési módjai. Az async
kulcsszó egy függvényt aszinkronnak jelöl, ami automatikusan egy Promise-t ad
vissza. Az await kulcsszó
pedig várakozik egy Promise teljesülésére, mielőtt tovább lépne a következő
sorra.
Hogyan működik?
Az async funkciók lehetővé
teszik, hogy az aszinkron kódot szinkronnak tűnő módon írjuk, ami olvashatóbbá
és karbantarthatóbbá teszi a kódot.
Példa:
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { const success = true; // Simulált siker if (success) { console.log('Adatok betöltve'); resolve(); // Promise teljesült } else { reject('Hiba történt'); // Promise elutasítva } }, 1000); });} async function loadData() { try { await fetchData(); // Várakozás a fetchData Promise-ra console.log('Az async/await sikeresen teljesült'); } catch (error) { console.error('Hiba:', error); // Hibakezelés }} // loadData hívásaloadData();
A loadData egy async függvény, amely az await kulcsszó segítségével várakozik a fetchData Promise-ra. Ha a Promise
teljesül, a következő sorok futnak le, ellenkező esetben a catch blokk kezelni fogja a hibát.
Feladat: Adatfeldolgozó Rendszer
Feladat Leírása
A feladat célja, hogy készíts egy egyszerű alkalmazást, amely bemutatja az
aszinkron JavaScript különböző módszereit. Az alkalmazásnak egy fiktív
adatfeldolgozó rendszert kell szimulálnia, amely adatokat tölt le egy
szerverről, és az adatokat feldolgozza.
Hozz létre egy js kiterjesztésű fájlt, az ellenőrzéshez, nyiss egy új
terminált, és a „node fájlod neve” paranccsal tudod ellenőrizni az eredményt.
Csak az aktuális mappád legyen megnyitva a vsc-ben.
Elvárt Funkcionalitás
1. Adatletöltés:
Készíts egy funkciót, amely szimulál egy aszinkron adatletöltést. Az
adatletöltést egy setTimeout-tal
kell szimulálni, amely 2 másodperc után visszaad egy adatobjektumot.
2. Adatok
Feldolgozása Callback-kel: Implementálj egy funkciót, amely a
letöltött adatokat feldolgozza, és az eredményt egy callback függvény
segítségével adja vissza.
3. Adatok
Feldolgozása Promises-szel: Implementálj egy funkciót, amely a
letöltött adatokat feldolgozza, és a Promise API-t használja a feldolgozott
adatok visszaadására.
4. Adatok
Feldolgozása Async/Await-tel: Implementálj egy funkciót, amely az
async/await segítségével dolgozza fel az adatokat.
A feladat
végén az alkalmazás három különböző módon kell, hogy kiírja a feldolgozott
adatokat a konzolra:
- Callback használatával
- Promise használatával
- Async/await használatával
Feladat: Külső JSON Adatok Feldolgozása
Feladat Célja
A feladat célja, hogy gyakorold az aszinkron JavaScript technikák alkalmazását külső JSON API-val. A JSONPlaceholder API-t fogjuk használni, amely egy ingyenes, fiktív API, és lehetővé teszi, hogy különböző típusú JSON adatokat kérjünk le. A feladat során három különböző módszert fogunk használni az adatok feldolgozására: callback-eket, Promises-t és async/await-et.
API URL
Az adatok lekéréséhez használd az alábbi JSONPlaceholder API URL-t: https://jsonplaceholder.typicode.com/users
Feladat Leírása
Külső Adatok Lekérése: Készíts egy JavaScript funkciót, amely lekéri a felhasználói adatokat a JSONPlaceholder API-ról.
Adatok Feldolgozása Callback-kel: Implementálj egy funkciót, amely a lekért adatokat egy callback segítségével dolgozza fel, és a feldolgozott adatokat egy HTML táblázatban jeleníti meg.
Adatok Feldolgozása Promises-szel: Implementálj egy funkciót, amely a lekért adatokat Promises segítségével dolgozza fel, és a feldolgozott adatokat a HTML táblázatban jeleníti meg.
Adatok Feldolgozása Async/Await-tel: Implementálj egy funkciót, amely async/await használatával dolgozza fel az adatokat, és a feldolgozott adatokat a HTML táblázatban jeleníti meg.
Teendők
HTML és CSS Előkészítése:
- Készíts egy HTML oldalt, amely tartalmaz egy táblázatot a felhasználói adatok megjelenítésére.
- Hozz létre három gombot, amelyek különböző aszinkron módszerekkel történő adatfeldolgozást indítanak el.
JavaScript Implementáció:
- Adatok Lekérése:
- Implementálj egy
fetchUsersfüggvényt, amely lekéri a felhasználói adatokat a JSONPlaceholder API-ból.
- Implementálj egy
- Adatok Feldolgozása Callback-kel:
- Implementálj egy
processUsersWithCallbackfüggvényt, amely a lekért adatokat callback-kel dolgozza fel. - Tedd lehetővé, hogy a feldolgozott adatokat a callback függvény a HTML táblázatban jelenítse meg.
- Implementálj egy
- Adatok Feldolgozása Promises-szel:
- Implementálj egy
processUsersWithPromisefüggvényt, amely a lekért adatokat Promises segítségével dolgozza fel. - Tedd lehetővé, hogy a feldolgozott adatokat a Promise
.then()metódusában a HTML táblázatban jelenítse meg.
- Implementálj egy
- Adatok Feldolgozása Async/Await-tel:
- Implementálj egy
processUsersWithAsyncAwaitfüggvényt, amely async/await használatával dolgozza fel az adatokat. - Tedd lehetővé, hogy a feldolgozott adatokat az async/await
.then()metódusában a HTML táblázatban jelenítse meg.
- Implementálj egy
- Adatok Lekérése:
HTML Táblázat Frissítése:
- Készíts egy
displayUsersfüggvényt, amely frissíti a HTML táblázatot a feldolgozott felhasználói adatokkal.
- Készíts egy
Gombok Eseménykezelése:
- Adj hozzá eseménykezelőket a három gombhoz, amelyek az adatfeldolgozó funkciókat hívják meg és frissítik a táblázatot.
Elvárt Eredmény
- Callback használatával: A felhasználói adatok a táblázatban jelennek meg a Callback funkció használatával.
- Promise használatával: A felhasználói adatok a táblázatban jelennek meg a Promise használatával.
- Async/Await használatával: A felhasználói adatok a táblázatban jelennek meg az Async/Await használatával.
Nincsenek megjegyzések:
Megjegyzés küldése