A korábbi oktatóanyagokban látta 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 beágyazódnak, és a program hosszú és összetett.
Ebben az oktatóanyagban megtanulja-
- Mik az ígéretek?
- Visszahívások az ígéretekre
- Beágyazott ígéretek kezelése
- Egyedi ígéret létrehozása
Mik az ígéretek?
Mielőtt ígéretekkel kezdenénk, nézzük át először a Node.js "visszahívási" funkcióit. Az előző fejezetekben sokat láthattuk ezeket a visszahívási funkciókat, ezért nézzük át gyorsan az egyiket.
Az alábbi példa egy kódrészletet mutat, amelyet a MongoDB adatbázishoz való csatlakozáshoz és az adatbázis egyik rekordjának frissítési művelet végrehajtásához használnak.
-
A fenti kódban a függvény része (err, db) névtelen vagy visszahívó függvény deklarációjaként ismert. Amikor a MongoClient kapcsolatot létesít a MongoDB adatbázissal, a csatlakozási művelet befejezése után visszatér a visszahívási funkcióhoz. Tehát bizonyos értelemben a kapcsolati műveletek a háttérben zajlanak, és ha ez megtörtént, meghívja a visszahívási függvényünket. Ne feledje, hogy ez a Node.js egyik legfontosabb 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 akkor kerül végrehajtásra, amikor a visszahívási funkciót ténylegesen meghívják. A visszahívási funkció csak egy rekordot frissít a MongoDB adatbázisunkban.
Akkor mi az ígéret? Nos, az ígéret csak a Node.js visszahívási funkcióinak továbbfejlesztése. A fejlesztés életciklusa során előfordulhat olyan eset, amikor több visszahívási funkciót kell egymásba ágyaznia. Ez kissé rendetlenné válhat, és egy adott időpontban nehéz fenntartani. Röviden: az ígéret a visszahívások továbbfejlesztése, amely e problémák enyhítésére irányul.
Az ígéret alapvető szintaxisa az alábbiakban látható;
var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
- A "doSomethingAync" bármilyen visszahívási vagy aszinkron függvény, amely valamiféle feldolgozást végez.
- Ezúttal a visszahívás meghatározásakor van egy érték, amelyet "ígéretnek" nevezünk.
- Az ígéret visszaküldése esetén 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 hibája lehet, amelyet az 'onRejected' paraméter jelöl.
Megjegyzés: Tehát az ígéret legfontosabb szempontja a visszatérési érték. A Node.js-ben normál visszahívások esetén nincs visszatérési érték fogalma. A visszatérési érték miatt jobban szabályozhatjuk, hogy miként definiálható a visszahívási funkció.
A következő témában példát fogunk látni az ígéretekre és arra, hogy miként profitálnak a visszahívásokból.
Visszahívások az ígéretekre
Most nézzünk meg egy példát arra, hogy miként használhatjuk az "ígéreteket" a Node.js alkalmazáson belül. Az ígéretek Node.js alkalmazásban történő felhasználásához először le kell tölteni és telepíteni kell az 'ígéret' modult.
Ezután az alábbiak szerint módosítjuk a kódunkat, amely ígéretek felhasználásával frissíti az „Alkalmazott” gyűjteményben lévő Employee nevet.
1. lépés: Telepítse az NPM modulokat
A Node JS alkalmazáson belüli ígéretek használatához az ígéret modulra van szükség. Az ígéret modul telepítéséhez futtassa az alábbi parancsot
npm telepítési ígéret
2. lépés: Módosítsa a kódot az ígéretek felvétele érdekében
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"}});});
Kód Magyarázat: -
- Az első rész tartalmazza az „ígéret” modult, amely lehetővé teszi számunkra, hogy az ígéret funkciót használni tudjuk a kódunkban.
- Most hozzáadhatjuk az 'akkor' függvényt a MongoClient.connect függvényünkhöz. Tehát ez az, hogy amikor létrejön a kapcsolat az adatbázissal, végre kell hajtanunk az utána definiált kódrészletet.
- Végül meghatározzuk a kódrészletet, amely elvégzi az alkalmazott EmployeeName nevének "Martin" névvel történő frissítését "Mohan" -ra.
Jegyzet:-
Ha most megnézi a MongoDB adatbázisának tartalmát, akkor azt tapasztalja, hogy ha létezik egy "Martin" rekord az EmployeeName névvel, akkor az "Mohan" névre vált.
Annak ellenőrzéséhez, hogy az adatok megfelelően lettek-e behelyezve az adatbázisba, a következő parancsokat kell végrehajtania a MongoDB-ben
- Használja az EmployeeDB alkalmazást
- db.Employee.find ({EmployeeName: Mohan})
Az első utasítás biztosítja, hogy csatlakozzon az EmployeeDb adatbázishoz. A második nyilatkozat azt a rekordot keresi, amelynek alkalmazott neve "Mohan".
Beágyazott ígéretek kezelése
Az ígéretek meghatározásakor meg kell jegyezni, hogy az "akkor" módszer maga is ígéretet ad. Tehát bizonyos értelemben az ígéretek egymásba ágyazhatók vagy láncolhatók.
Az alábbi példában láncolást használunk 2 visszahívási függvény meghatározására, amelyek mindkettőt beillesztenek egy rekordba a MongoDB adatbázisba.
( Megjegyzés : A láncolás a metódusok végrehajtásának összekapcsolására használt fogalom. Tegyük fel, hogy ha az alkalmazásodnak két metódusa volt, az úgynevezett „methodA” és „methodB”. És a logika olyan volt, hogy a „methodB” -t a „methodA” után kell meghívni. akkor a végrehajtást úgy kapcsolnád össze, hogy a 'methodB' közvetlenül a 'methodA' után kerül meghívásra.)
Ebben a példában a legfontosabb megjegyezni, hogy a kód tisztábbá, olvashatóbbá és karbantarthatóbbá válik 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"})})});
Kód Magyarázat: -
- Most 2 "akkor" záradékot definiálunk, amelyek egymás után kerülnek végrehajtásra. Az első záradékban átadjuk a 'db' paramétert, amely az adatbázis-kapcsolatunkat tartalmazza. Ezután a 'db' kapcsolat gyűjteménytulajdonságát használjuk rekordok beszúrására az 'Alkalmazottak' gyűjteménybe. Az 'insertOne' metódust használják a tényleges dokumentum beillesztésére az Alkalmazottak gyűjteményébe.
- Ezután a 2. , majd a záradékot is felhasználjuk egy másik rekord beillesztésére az adatbázisba.
Ha most ellenőrzi a MongoDB adatbázis tartalmát, akkor a 2 rekordot be fogja illeszteni a MongoDB adatbázisba.
Egyedi ígéret létrehozása
Egyedi ígéret a 'q' nevű csomópont modul használatával hozható létre. A 'q' könyvtárat le kell tölteni és telepíteni kell a csomópont csomagkezelővel. A 'q' könyvtár használata után meghívható a "denodeify" metódus, aminek következtében bármelyik függvény olyan funkcióvá válik, amely ígéretet ad vissza.
Az alábbi példában létrehozunk egy "Add" nevű egyszerű függvényt, amely 2 számot ad hozzá. Ezt a függvényt átalakítjuk egy olyan funkcióvá, amely visszaadja az ígéretet.
Miután ez megtörtént, az Add függvény által adott ígéretet felhasználjuk egy üzenet megjelenítésére a console.log-ban.
Kövessük az alábbi lépéseket az egyéni függvény létrehozásához az ígéret visszaadásához.
1. lépés: Telepítse az NPM modulokat
A „q” használatához egy Node JS alkalmazáson belül a „q” modulra van szükség. A 'q' modul telepítéséhez futtassa az alábbi parancsot
npm telepítés q
2. lépés: Adja meg a következő kódot, amelyet az egyedi ígéret létrehozásához használnak.
Kód Magyarázat: -
- Az első bit a 'q' könyvtár beillesztése a szükséges kulcsszó használatával. A könyvtár használatával bármilyen funkciót megadhatunk a visszahívás visszaadásához.
- Létrehozunk egy Add nevű függvényt, amely 2 számot ad hozzá az a és b változókban definiálva. Ezen értékek összegét a c változó tárolja.
- Ezután a q könyvtár segítségével denodifikáljuk (az a módszer, amellyel bármilyen függvényt átalakítunk olyan függvénygé, amely ígéretet adna vissza) az Add függvényünket, vagy más módon átalakítjuk az Add függvényt egy olyan függvényké, amely ígéretet ad vissza.
- Most hívjuk az "Add" függvényünket, és képesek vagyunk megkapni egy visszatérési ígéret értéket az előző lépés miatt, amelyet az Add függvény denominálására végeztünk.
- Az 'then' kulcsszóval adja meg, hogy ha a függvény sikeresen végrehajtásra kerül, akkor a konzol.logban jelenítse meg az "Addition function complete" karakterláncot.
A fenti kód futtatásakor az "Addition function complete" kimenet megjelenik a console.log-ban az alábbiak szerint.
Összegzés
- A Node.js-ben a visszahívási funkciók használatának vannak hátrányai. Néha a fejlesztés során a visszahívási függvények beágyazott használata megnehezítheti a kódot és nehezen fenntartható.
- A beágyazott visszahívási funkciókkal kapcsolatos legtöbb probléma csökkenthető az ígéretek és a generátorok használatával a node.js fájlban
- A Promise egy olyan érték, amelyet egy aszinkron függvény ad vissza, jelezve az aszinkron függvény által végzett feldolgozás befejezését.
- Az ígéretek egymásba ágyazhatók, hogy a kód jobban és könnyebben fenntartható legyen, ha aszinkron függvényt kell meghívni egy másik aszinkron funkció után.