Node.js Promise-zelfstudie

Inhoudsopgave:

Anonim

In eerdere tutorials zou u callback-functies hebben gezien die worden gebruikt voor asynchrone gebeurtenissen. Maar soms kunnen callback-functies een nachtmerrie worden wanneer ze genest worden en het programma lang en complex begint te worden.

In deze tutorial leer je-

  • Wat zijn beloftes?
  • Terugbellen naar beloften
  • Omgaan met geneste beloften
  • Een belofte op maat maken

Wat zijn beloftes?

Voordat we met beloften beginnen, kijken we eerst naar de "callback" -functies in Node.js. We hebben deze callback-functies veel gezien in de vorige hoofdstukken, dus laten we er snel eentje doornemen.

Het onderstaande voorbeeld toont een codefragment dat wordt gebruikt om verbinding te maken met een MongoDB-database en een updatebewerking uit te voeren op een van de records in de database.

  1. In de bovenstaande code staat het deel van de functie (err, db) bekend als de declaratie van een anonieme of callback-functie. Wanneer de MongoClient een verbinding maakt met de MongoDB-database, keert deze terug naar de callback-functie zodra de verbindingsbewerking is voltooid. Dus in zekere zin gebeuren de verbindingsbewerkingen op de achtergrond, en als het klaar is, roept het onze callback-functie op. Onthoud dat dit een van de belangrijkste punten van Node.js is om veel bewerkingen gelijktijdig te laten plaatsvinden en dus geen enkele gebruiker te blokkeren om een ​​bewerking uit te voeren.

  2. Het tweede codeblok is wat wordt uitgevoerd wanneer de callback-functie daadwerkelijk wordt aangeroepen. De callback-functie werkt slechts één record in onze MongoDB-database bij.

Dus wat is een belofte dan? Een belofte is slechts een verbetering van de callback-functies in Node.js. Tijdens de ontwikkelingscyclus kan er een instantie zijn waarbij u meerdere callback-functies samen moet nesten. Dit kan op een bepaald moment een beetje rommelig worden en moeilijk te onderhouden. Kortom, een belofte is een verbetering van callbacks die erop gericht zijn deze problemen te verlichten.

De basissyntaxis van een belofte wordt hieronder weergegeven;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • "doSomethingAync" is een callback of asynchrone functie die een soort van verwerking uitvoert.
  • Deze keer is er bij het definiëren van de callback een waarde die wordt geretourneerd, een "belofte".
  • Wanneer een belofte wordt geretourneerd, kan deze 2 uitgangen hebben. Dit wordt bepaald door de 'then-clausule'. Ofwel de bewerking kan een succes zijn, wat wordt aangegeven door de parameter 'onFulfilled'. Of het kan een fout hebben die wordt aangegeven door de parameter 'onRejected'.

Opmerking: het belangrijkste aspect van een belofte is dus de retourwaarde. Er is geen concept van een retourwaarde bij het werken met normale callbacks in Node.js. Vanwege de retourwaarde hebben we meer controle over hoe de callback-functie kan worden gedefinieerd.

In het volgende onderwerp zullen we een voorbeeld zien van beloften en hoe ze profiteren van terugbelverzoeken.

Terugbellen naar beloften

Laten we nu eens kijken naar een voorbeeld van hoe we "beloften" kunnen gebruiken vanuit een Node.js-applicatie. Om beloften te kunnen gebruiken in een Node.js-applicatie, moet de 'belofte'-module eerst worden gedownload en geïnstalleerd.

We zullen dan onze code aanpassen zoals hieronder getoond, die een Werkgeversnaam in de 'Werknemer'-collectie bijwerkt door middel van beloftes.

Stap 1) De NPM-modules installeren

Om Promises te gebruiken vanuit een Node JS-applicatie, is de belofte-module vereist. Voer de onderstaande opdracht uit om de belofte-module te installeren

npm install belofte

Stap 2) Wijzig de code om beloften op te nemen

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

  1. Het eerste deel is om de 'belofte'-module op te nemen waarmee we de belofte-functionaliteit in onze code kunnen gebruiken.
  2. We kunnen nu de 'toen'-functie toevoegen aan onze MongoClient.connect-functie. Dus wat dit doet, is dat wanneer de verbinding tot stand is gebracht met de database, we het codefragment moeten uitvoeren dat daarna is gedefinieerd.
  3. Ten slotte definiëren we ons codefragment dat het werk doet van het bijwerken van EmployeeName van de werknemer met de naam "Martin" naar "Mohan".

Notitie:-

Als u nu de inhoud van uw MongoDB-database controleert, zult u zien dat als er een record met Werknemersnaam "Martin" bestaat, deze zal worden bijgewerkt naar "Mohan".

Om te controleren of de gegevens correct in de database zijn ingevoegd, moet u de volgende opdrachten uitvoeren in MongoDB

  1. Gebruik EmployeeDB
  2. db.Employee.find ({EmployeeName: Mohan})

Het eerste statement zorgt ervoor dat je verbonden bent met de EmployeeDb database. De tweede instructie zoekt naar het record met de werknemersnaam "Mohan".

Omgaan met geneste beloften

Bij het definiëren van beloften moet worden opgemerkt dat de "dan" -methode zelf een belofte retourneert. Dus in zekere zin kunnen beloften in elkaar worden genest of aan elkaar worden geketend.

In het onderstaande voorbeeld gebruiken we chaining om 2 callback-functies te definiëren, die beide een record in de MongoDB-database invoegen.

Het belangrijkste om op te merken in dit voorbeeld is dat de code schoner, leesbaar en onderhoudbaar wordt door geneste beloften te gebruiken.

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

  1. We definiëren nu 2 "toen" -clausules die na elkaar worden uitgevoerd. In de eerste then-clausule geven we de parameter 'db' door die onze databaseverbinding bevat. We gebruiken dan de collectie-eigenschap van de 'db'-verbinding om records in de' Employee'-collectie in te voegen. De 'insertOne'-methode wordt gebruikt om het daadwerkelijke document in de werknemerscollectie in te voegen.
  2. We gebruiken dan de 2 e then-clausule ook om een ​​ander record in de database in te voegen.

Als u nu de inhoud van uw MongoDB-database controleert, vindt u de 2 records ingevoegd in de MongoDB-database.

Een belofte op maat maken

Een aangepaste belofte kan worden gemaakt met behulp van een knooppuntmodule met de naam 'q'. De 'q'-bibliotheek moet worden gedownload en geïnstalleerd met behulp van de knooppuntpakketbeheerder. Na gebruik van de 'q'-bibliotheek, kan de methode "denodeify" worden aangeroepen, waardoor elke functie een functie wordt die een belofte teruggeeft.

In het onderstaande voorbeeld maken we een eenvoudige functie genaamd "Toevoegen" die 2 getallen zal optellen. We zullen deze functie omzetten in een functie om een ​​belofte te retourneren.

Zodra dat is gebeurd, gebruiken we de belofte die wordt geretourneerd door de functie Toevoegen om een ​​bericht weer te geven in de console.log.

Laten we de onderstaande stappen volgen om onze aangepaste functie te maken om een ​​belofte te retourneren.

Stap 1) De NPM-modules installeren

Om 'q' te gebruiken vanuit een Node JS-applicatie, is de 'q'-module vereist. Voer de onderstaande opdracht uit om de 'q'-module te installeren

npm installeren q

Stap 2) Definieer de volgende code die zal worden gebruikt om de aangepaste belofte te maken.

Code Verklaring: -

  1. Het eerste bit is om de 'q'-bibliotheek op te nemen met behulp van het vereiste sleutelwoord. Door deze bibliotheek te gebruiken, kunnen we elke functie definiëren om een ​​callback te retourneren.
  2. We maken een functie met de naam Toevoegen die 2 getallen toevoegt die zijn gedefinieerd in variabelen a en b. De som van deze waarden wordt opgeslagen in variabele c.
  3. We gebruiken dan de q-bibliotheek om onze Add-functie te denodificeren (de methode die wordt gebruikt om een ​​functie om te zetten in een functie die een belofte zou retourneren) of om op een andere manier onze Add-functie om te zetten in een functie die een belofte retourneert.
  4. We noemen nu onze "Add" -functie en zijn in staat om een ​​retourbeloftewaarde te krijgen vanwege de vorige stap die we hebben uitgevoerd om de Add-functie te denodificeren.
  5. Het 'then'-sleutelwoord wordt gebruikt om op te geven dat als de functie met succes wordt uitgevoerd, de tekenreeks "Addition-functie voltooid" in het console.log wordt weergegeven.

Wanneer de bovenstaande code wordt uitgevoerd, wordt de uitvoer "Optelfunctie voltooid" weergegeven in de console.log, zoals hieronder wordt weergegeven.

Overzicht

  • Het gebruik van callback-functies in Node.js heeft zijn nadelen. Soms kan tijdens het ontwikkelingsproces het geneste gebruik van callback-functies de code rommeliger en moeilijker te onderhouden maken.
  • De meeste problemen met geneste callback-functies kunnen worden beperkt door het gebruik van beloften en generatoren in node.js
  • Een belofte is een waarde die wordt geretourneerd door een asynchrone functie om de voltooiing aan te geven van de verwerking die wordt uitgevoerd door de asynchrone functie.
  • Beloften kunnen in elkaar worden genest om code er beter uit te laten zien en gemakkelijker te onderhouden wanneer een asynchrone functie moet worden aangeroepen na een andere asynchrone functie