Ugrás a fő tartalomhoz

Node.js és aszinkronitás

Node.js

A Node.js lehetővé teszi, hogy JavaScriptet futtassunk szerveren.

  • Aszinkron és eseményvezérelt: képes egyszerre több kapcsolatot fogadni, és az event loop segítségével képes aszinkron műveleteket végrehajtani.
  • Egyszálú: egyetlen szálon fut, de képes több műveletet párhuzamosan kezelni az aszinkronitás segítségével.

Hogyan működik?

  • A Chrome V8 JavaScript engine-re épül
  • Event-driven
  • Non-blocking I/O
  • Egy szálon fut, de aszinkron módon kezeli a műveleteket

Event loop

A Node.js nem blokkoló módon működik.

Példa:

setTimeout(() => {
console.log('Késleltetett');
}, 1000);

console.log('Azonnali');

Kimenet:

Azonnali
Késleltetett

A setTimeout egy aszinkron művelet, amely a callback függvényt (callback = egy olyan függvény, amit egy másik függvénynek adunk át paraméterként, és az hívja meg később) egy későbbi időpontban hajtja végre, miközben a fő szál tovább fut, azaz nem blokkolja a console.log('Azonnali') végrehajtását.


Aszinkronitás

Promise

A Promise (ígéret) egy objektum, amely egy aszinkron művelet jövőbeli eredményét reprezentálja. Három állapota lehet:

  • Pending (függőben): A művelet még folyamatban van.
  • Fulfilled (teljesült): A művelet sikeresen befejeződött, és van eredménye.
  • Rejected (elutasított): A művelet hibával zárult.

A .then() metódussal kezeljük a sikeres eredményt, a .catch() metódussal pedig az esetleges hibákat.

fetch('https://api.com/data')
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error(error));

A fetch egy aszinkron művelet, amely egy Promise-t ad vissza. A then metódusok segítségével kezeljük a sikeres és hibás eseteket, a catch metódus pedig a dobott hibák kezelésére szolgál.

async/await

async function load() {
const response = await fetch('https://api.com/data');
const data = await response.json();
console.log(data);
}

Az async/await olvashatóbb és könnyebben követhető, mint a Promise láncolás, különösen összetettebb aszinkron műveletek esetén. Az await kulcsszó megállítja a függvény végrehajtását, amíg a Promise teljesül, majd visszaadja a Promise értékét. De nem blokkolja a teljes alkalmazást, csak az adott async függvény végrehajtását.


npm és a csomagkezelők

Az npm a Node.js csomagkezelője.

Mire jó?

  • Külső könyvtárak telepítése
  • Projekt függőségek kezelése
  • Script futtatás

Példa:

npm init -y
npm install express

Telepíti az Express könyvtárat, és létrehozza a package.json fájlt a projekt gyökerében, amely tartalmazza a projekt nevét, verzióját és a telepített függőségeket és azok verzióit.

Alternatívák:

  • yarn
  • pnpm

Készítette: Tarjányi Csanád