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.

Node.js Promise

  1. 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.
  2. 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

Visszahívások az ígéretekhez

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:-

  1. 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.
  2. 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.
  3. 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

  1. Használja az EmployeeDB-t
  2. 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.

A Nested Promises kezelése

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:-

  1. 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.
  2. 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.

Egyéni ígéret készítése

Code Magyarázat:-

  1. 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.
  2. 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.
  3. 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é.
  4. 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.
  5. 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.

Egyéni ígéret készítése

Ö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.

Foglald össze ezt a bejegyzést a következőképpen: