Node.js Promise oktatóanyag
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 az ígéretekkel kezdenénk, először nézzük meg, melyek a Node.js „visszahívási” funkciói. Ezekkel a visszahívási funkciókkal sokat találkoztunk az előző fejezetekben, ezért nézzünk át gyorsan egyet.
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.
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.
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ítani fogjuk a kódunkat az alábbiak szerint, amely ígéretek segítségével frissíti az Alkalmazotti nevet az „Employee” gyűjteményben.
Step 1) Az NPM modulok telepítése
A Promises Node JS alkalmazáson belüli használatához az ígéret modul szükséges. Az ígéret 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.
Megjegyzés: -
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({Alkalmazottnév :Mohan })
Az első utasítás biztosítja, hogy csatlakozik az EmployeeDb adatbázishoz. A második utasítás azt a rekordot keresi, amelyben a „Mohan” alkalmazott neve szerepel.
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 találja a 2 rekordot a MongoDB adatbázisban.
Egyedi ígéret készítése
Egyéni ígéret a 'q' csomóponti modul használatával hozható létre. A 'q' könyvtárat le kell tölteni és telepíteni kell a csomóponti csomagkezelő segítségével. A 'q' könyvtár használata után a "denodeify" metódus meghívható, amitől bármely függvény olyan függvény lesz, amely ígéretet ad vissza.
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 denodefikálására (a módszer, amellyel bármely függvényt olyan függvénnyel alakítanak át, amely ígéretet ad vissza), vagy más módon átalakítjuk az Add függvényünket ígéretet visszaadó függvényré.
- 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ó megadja, hogy ha a függvény sikeresen végrehajtásra került, akkor a console.log fájlban jelenítse meg az "Addition function complete" karakterláncot.
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.
Összegzésként
- A Node.js-ben a visszahívási függvények használatának megvannak a maga hátrányai. Néha a fejlesztési folyamat során a visszahívási függvények beágyazott használata zavarosabbá és nehezen karbantarthatóvá teheti a kódot.
- A beágyazott visszahívási függvényekkel kapcsolatos legtöbb probléma enyhíthető ígéretek és generátorok használatával node.js
- Az ígéret egy aszinkron függvény által visszaadott érték, amely jelzi az aszinkron függvény által végrehajtott feldolgozás befejezését.
- Az ígéretek egymásba ágyazhatók, hogy a kód jobban nézzen ki és könnyebben karbantartható legyen, amikor egy aszinkron függvényt egy másik aszinkron függvény után kell meghívni.





