Az aszinkron programozás lehetővé teszi a felhasználói interakciókat, hálózati kéréseket és más hosszadalmas műveleteket anélkül, hogy blokkolná a program futását. Az egyik aszinkron módszer a callback. A callback függvények segítségével lehetőség van arra, hogy egy művelet befejezése után meghatározott kódot hajtsunk végre. Gyakorlatilag egy függvény argumentumaként meghívunk egy másik függvényt.
Példa: Ebben a feladatban a hatvanyoz függvény a megadott kitevőre emeli a számot és a kiszámított eredményt átadja a callback függvénynek. A eredmenyKiiras függvény egy egyszerű kiírást hajt végre, kiírja a konzolra az eredményt. Amikor a hatvanyoz függvény meghívódik, a callback függvény (jelen esetben eredmenyKiiras) lefut az eredménnyel.
1 2 3 4 5 6 7 8 9 10 |
function hatvanyoz(szam, kitevo, callback) { const eredmeny = Math.pow(szam, kitevo); callback(eredmeny); } function eredmenyKiiras(eredmeny) { console.log('Eredmény: ' + eredmeny); } hatvanyoz(2, 3, eredmenyKiiras); // Az eredményKiiras callback függvényt hívjuk meg az eredménnyel |
Példa 2.: Számoljuk ki a téglalap kerületét, területét, az eredmény kiíráshoz használjunk callback-et!
1 2 3 4 5 6 7 8 9 10 |
function teglalapKeruletTerulet(a, b, callback) { const kerulet = 2 * (a + b); const terulet = a * b; callback(kerulet, terulet); } function eredmenyKiiras(kerulet, terulet) { console.log('A téglalap kerülete: ' + kerulet); console.log('A téglalap területe: ' + terulet); } teglalapKeruletTerulet(5, 8, eredmenyKiiras); |
Módosítsuk úgy, hogy az adatokat bekérjük:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function teglalapKeruletTerulet(callback) { const a = parseFloat(prompt('Kérem adja meg az "a" oldal hosszát:')); const b = parseFloat(prompt('Kérem adja meg a "b" oldal hosszát:')); if (isNaN(a) || isNaN(b)) { console.log('Hibás bemenet. Kérem csak számokat adjon meg az oldalhosszakhoz.'); return; } const kerulet = 2 * (a + b); const terulet = a * b; callback(kerulet, terulet); } function eredmenyKiiras(kerulet, terulet) { console.log('A téglalap kerülete: ' + kerulet); console.log('A téglalap területe: ' + terulet); } teglalapKeruletTerulet(eredmenyKiiras); |
Az aszinkron programozással a JavaScript programok hosszan futó feladatokat indíthatnak el, és párhuzamosan folytathatnak más feladatokat. Az aszinkron programokat azonban nehéz írni, és nehéz a hibakeresés. Emiatt a legtöbb modern aszinkron JavaScript eljárás nem használ callback-et. Ehelyett a JavaScriptben az aszinkron programozást promises használatával oldják meg.