Node.js Promise oktatóanyag
⚡ Okos összefoglaló
A Node.js ígéretei a mélyen beágyazott visszahívásokat egy egyszeri lefutású visszaadott objektummal helyettesítik, így az aszinkron adatbázis-munka egy lapos, akkor záradékokból álló láncolatként olvasható, nem pedig anonim függvények piramisaként.
A korábbi oktatóanyagokban láthatta volna az aszinkron eseményekhez használt visszahívási funkciókat. De néha a visszahívási funkciók rémálommá válhatnak, amikor kezdenek egymásba ágyazni, és a program hosszú és összetett lesz.
Mik azok az ígéretek?
Mielőtt belekezdenénk az ígéretekkel, először nézzük át, hogy mik is a „visszahívó” függvények a node.jsAz előző fejezetekben már sokat láttuk ezeket a visszahívó függvényeket, ezért nézzük át gyorsan az egyiket.
Az alábbi példa egy kódrészletet mutat be, amely az a MongoDB adatbázist, és hajtson végre frissítési műveletet az adatbázis egyik rekordján.
- A fenti kódban a függvény része (err,db) névtelen vagy visszahívási függvény deklarációjaként ismert. Amikor a MongoClient kapcsolatot hoz létre a MongoDB adatbázis, akkor a kapcsolati művelet befejezése után visszatér a visszahívási funkcióhoz. Tehát bizonyos értelemben a kapcsolódási műveletek a háttérben történnek, és amikor ez megtörtént, meghívja a visszahívási függvényünket. Ne feledje, hogy ez a Node.js egyik kulcsfontosságú pontja, amely lehetővé teszi számos művelet egyidejű végrehajtását, és így nem akadályozza meg a felhasználókat egy művelet végrehajtásában.
- A második kódblokk az, ami a visszahívási függvény tényleges meghívásakor kerül végrehajtásra. A visszahívási funkció csak egy rekordot frissít a mi listánkban MongoDB adatbázisban.
Akkor mi az ígéret? Nos, az ígéret csak a Node.js visszahívási funkcióinak továbbfejlesztése. A fejlesztési életciklus során előfordulhat, hogy több visszahívási függvényt kell egymásba ágyaznia. Ez egy bizonyos időpontban zavarossá válhat, és nehéz fenntartani. Röviden, az ígéret a visszahívások továbbfejlesztése, amely ezen problémák enyhítésére irányul.
Az ígéret alapvető szintaxisa alább látható;
var promise = doSomethingAync()
promise.then(onFulfilled, onRejected)
- A „doSomethingAync” bármely visszahívási vagy aszinkron függvény, amely valamilyen feldolgozást végez.
- Ezúttal a visszahívás meghatározásakor van egy érték, amelyet „ígéretnek” neveznek.
- Ha egy ígéret visszaküldésre kerül, annak 2 kimenete lehet. Ezt az „akkor záradék” határozza meg. Bármelyik művelet sikeres lehet, amelyet az „onFulfilled” paraméter jelöl. Vagy lehet egy hiba, amelyet az „onRejected” paraméter jelöl.
A ígéret három állam egyikében ül és egyszer letelepszik:
| Állami | Jelentés |
|---|---|
| Függőben levő | A munka még nem fejeződött be. |
| Teljesített | Az onFulfilled lefut az adott értékkel. |
| Elutasítva | Az onRejected hibával fut le. |
Jegyzet: Tehát az ígéret legfontosabb szempontja a visszatérési érték. Ha normál visszahívásokkal dolgozik a Node.js-ben, akkor nincs visszatérési érték fogalma. A visszatérési érték miatt jobban szabályozhatjuk, hogyan határozható meg a visszahívási függvény.
Verzió megjegyzés: ezek a példák továbbra is futnak a Node.js 24-en, az Active LTS vonalon 2026-ban. A Node.js 15 óta kezeletlen elutasítás A figyelmeztetés kiírása helyett a folyamatot állítja le, ezért minden láncot a .catch() függvénnyel kell lezárni.
A következő témakörben egy példát láthatunk az ígéretekre, és arra, hogy milyen hasznuk származik a visszahívásokból.
Az ígéretek visszahívása
Most nézzünk egy példát arra, hogyan használhatjuk az „ígéreteket” egy Node.js alkalmazáson belül. Az ígéretek Node.js alkalmazásban való használatához először le kell tölteni és telepíteni kell a „promise” modult.
Ezután módosítjuk a kódunkat az alábbiak szerint, amely az „Employee” gyűjteményben található EmployeeName változót ígéretek használatával frissíti.
Step 1) A NPM modulok
A Promises modul Node.js alkalmazáson belüli használatához szükséges a promise modul. A promise modul telepítéséhez futtassa az alábbi parancsot.
npm telepítési ígéret
Step 2) Módosítsa a kódot, hogy ígéreteket tartalmazzon
var Promise = require('promise'); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url) .then(function(err, db) { db.collection('Employee').updateOne({ "EmployeeName": "Martin" }, { $set: { "EmployeeName": "Mohan" } }); });
Code Magyarázat:
- Az első rész az „ígéret” modul beépítése, amely lehetővé teszi számunkra az ígéret funkció használatát a kódunkban.
- A MongoClient.connect függvényünkhöz most hozzáfűzhetjük a „tén” függvényt. Tehát ez azt jelenti, hogy amikor létrejön a kapcsolat az adatbázissal, végre kell hajtanunk az ezután meghatározott kódrészletet.
- Végül meghatározzuk a kódrészletünket, amely elvégzi a „Martin” nevű alkalmazott EmployeeName-jének frissítését „Mohan”-ra.
Jegyzet:
Ha most ellenőrzi a tartalmát MongoDB adatbázisban, akkor azt találja, hogy ha létezik „Martin” EmployeeName rekord, akkor az „Mohan”-ra frissül.
Annak ellenőrzéséhez, hogy az adatok megfelelően kerültek-e be az adatbázisba, hajtsa végre a következő parancsokat MongoDB
- használja az EmployeeDB-t
- db.Employee.find({AlkalmazottNeve : „Mohan”})
Az első utasítás biztosítja, hogy csatlakozzon az EmployeeDB adatbázishoz. A második utasítás a „Mohan” alkalmazottnevet tartalmazó rekordot keresi.
Beágyazott ígéretekkel való foglalkozás
Az ígéretek meghatározásakor figyelembe kell venni, hogy maga a „majd” módszer ígéretet ad vissza. Tehát bizonyos értelemben az ígéretek egymásba ágyazhatók vagy egymáshoz láncolhatók.
Az alábbi példában láncolást használunk 2 visszahívási függvény definiálására, amelyek mindegyike beszúr egy rekordot a MongoDB adatbázisban.
(Megjegyzések: A láncolás egy olyan fogalom, amelyet a metódusok végrehajtásának összekapcsolására használnak. Tegyük fel, hogy az alkalmazásnak 2 metódusa van, a „methodA” és a „methodB”. És a logika olyan volt, hogy a 'methodB'-t a 'methodA' után kell meghívni, akkor a végrehajtást úgy kell láncolni, hogy a 'methodB' közvetlenül a 'methodA' után kerüljön meghívásra.)
Ebben a példában a legfontosabb megjegyezni, hogy a kód tisztábbá, olvashatóbbá és karbantarthatóbbá válik a beágyazott ígéretek használatával.
var Promise = require('promise'); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url) .then(function(db) { db.collection('Employee').insertOne({ Employeeid: 4, EmployeeName: "NewEmployee" }) .then(function(db1) { db1.collection('Employee').insertOne({ Employeeid: 5, EmployeeName: "NewEmployee1" }) }) });
Code Magyarázat:
- Most definiálunk 2 „akkor” záradékot, amelyek egymás után kerülnek végrehajtásra. Az első then záradékban a 'db' paramétert adjuk át, amely tartalmazza az adatbázis-kapcsolatunkat. Ezután a 'db' kapcsolat collection tulajdonságát használjuk rekordok beszúrására az 'Alkalmazott' gyűjteménybe. Az „insertOne” metódus az aktuális dokumentum beszúrására szolgál az Employee gyűjteménybe.
- Ezután a 2-t használjuknd majd záradékkal egy másik rekordot is be kell illeszteni az adatbázisba.
Ha most ellenőrzi a tartalmát MongoDB adatbázisban a 2 rekordot beillesztve találja MongoDB adatbázisban.
Modern megfelelője: Az ES2017 óta szabványos async és await ezeket az ígéreteket visszahívások nélkül használják fel, és nagyrészt felváltották az generátor alapú folyamatszabályozási könyvtárak, mint például a co, míg a natív Promise támogatás redundánssá teszi a q-t és a bluebird-öt. A második blokk azt mutatja, hogy ekkor csak a db fogadása történik.
Egyedi ígéret készítése
Egyéni ígéret létrehozható a „q” nevű Node.js modul használatával. A „q” könyvtárat le kell tölteni és telepíteni kell a Node Package Manager segítségével. A „q” könyvtár használata után meghívható a „denodeify” metódus, amely bármely függvényt ígéretet visszaadó függvénnyé alakít.
Az alábbi példában létrehozunk egy „Hozzáadás” nevű egyszerű függvényt, amely 2 számot ad hozzá. Ezt a függvényt olyan függvényré alakítjuk, amely ígéretet ad vissza.
Ha ez megtörtént, a Hozzáadás függvény által visszaadott ígéret segítségével megjelenítünk egy üzenetet a console.log fájlban.
Kövesse az alábbi lépéseket az ígéret visszaadásához szükséges egyéni függvény létrehozásához.
Step 1) Az NPM modulok telepítése
A 'q' Node.js alkalmazáson belüli használatához a 'q' modul szükséges. A 'q' modul telepítéséhez futtassa az alábbi parancsot.
npm install q
Step 2) Határozza meg a következő kódot, amelyet az egyéni ígéret létrehozásához fog használni.
Code Magyarázat:
- Az első bit a 'q' könyvtár felvétele a request kulcsszó használatával. Ennek a könyvtárnak a használatával bármilyen függvényt definiálhatunk a visszahívás visszaadásához.
- Létrehozunk egy Add nevű függvényt, amely összeadja az a és b változókban meghatározott 2 számot. Ezen értékek összege a c változóban lesz tárolva.
- Ezután a q könyvtárat használjuk az Add függvényünk denodeifikálására (az a metódus, amellyel bármely függvényt ígéretet visszaadó függvénnyé alakítunk), vagy más szóval az Add függvényünket ígéretet visszaadó függvénnyé alakítjuk.
- Most hívjuk a „Hozzáadás” függvényünket, és az előző lépésnek köszönhetően, amelyet az Add funkció denodeify-ként végrehajtottunk, kapunk egy visszatérési ígéret értéket.
- A 'then' kulcsszó azt adja meg, hogy ha a függvény sikeresen végrehajtódik, akkor a console.log naplóban a „Kiegészítő függvény befejezve” karakterlánc jelenjen meg.
A fenti kód futtatásakor a „Hozzáadás funkció befejeződött” kimenet jelenik meg a console.log fájlban, az alábbiak szerint.





