JavaScript: callbacks

JavaScript Web

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.

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!

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:

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.