Sobes.tech
Middle

Hogyan dolgozik aszinkron JavaScript-tel?

sobes.tech MI

Válasz az MI-től

Aszinkron műveletekkel JavaScript-ben callback-ek, promise-ok és async/await segítségével dolgozom.

A callback-ek olyan függvények, amelyeket más függvények argumentumaként adunk át, és egy művelet befejezése után futnak le. Bonyolultabb beágyazás esetén "callback pokolhoz" vezethetnek.

// Callback példa
function fetchData(callback) {
  setTimeout(() => {
    callback("Adatok megérkeztek");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // 1 másodperc múlva kiírja, hogy "Adatok megérkeztek"
});

A promise-ok olyan objektumok, amelyek egy aszinkron művelet végleges befejezését vagy sikertelenségét reprezentálják. Egyszerűsítik az aszinkron kód kezelését, elkerülve a mély beágyazást. Három állapotuk van: pending (függőben), fulfilled (teljesült), rejected (elutasítva).

// Promise példa
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Adatok megérkeztek");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // 1 másodperc múlva kiírja, hogy "Adatok megérkeztek"
  })
  .catch((error) => {
    console.error("Hiba:", error);
  });

Az async/await a promise-okon alapuló szintaktikus cukor, amely olvashatóbbá teszi az aszinkron kódot, hasonlóvá a szinkronhoz. Egy async-al jelölt függvény mindig promise-t ad vissza. Az await csak async függvényen belül használható, és megállítja a végrehajtást, amíg a promise nem teljesül vagy elutasításra kerül.

// async/await példa
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Adatok megérkeztek");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // 1 másodperc múlva kiírja, hogy "Adatok megérkeztek"
  } catch (error) {
    console.error("Hiba:", error);
  }
}

processData();

Gyakran használom az async/await-et API-kéréseknél, mivel ez a legkényelmesebb és legolvasmányosabb módja az aszinkron műveletek kezelésének. Több aszinkron művelet párhuzamos végrehajtásához a Promise.all() vagy a Promise.allSettled()-et használom.

Az event loop segítségével megértem az aszinkron kód végrehajtási sorrendjét, a mikro- és makro-feladatokat.