Node.js løftevejledning

I tidligere tutorials ville du have set tilbagekaldsfunktioner, der bruges til asynkrone begivenheder. Men nogle gange kan tilbagekaldsfunktioner blive et mareridt, når de begynder at blive indlejrede, og programmet begynder at blive langt og komplekst.

I denne vejledning lærer du-

  • Hvad er løfter?
  • Tilbagekaldelser til løfter
  • Håndtering af indlejrede løfter
  • Oprettelse af et brugerdefineret løfte

Hvad er løfter?

Før vi begynder med løfter, lad os først se på, hvad der er "callback" -funktioner i Node.js. Vi har set disse tilbagekaldsfunktioner meget i de foregående kapitler, så lad os hurtigt gennemgå en af ​​dem.

Eksemplet nedenfor viser et kodestykke, der bruges til at oprette forbindelse til en MongoDB-database og udføre en opdateringshandling på en af ​​posterne i databasen.

  1. I ovenstående kode er den del af funktionen (err, db) kendt som erklæringen om en anonym eller tilbagekaldsfunktion. Når MongoClient opretter en forbindelse til MongoDB-databasen, vender den tilbage til tilbagekaldsfunktionen, når forbindelsen er afsluttet. Så på en måde sker forbindelsesoperationerne i baggrunden, og når det er gjort, kalder det vores tilbagekaldsfunktion. Husk at dette er et af nøglepunkterne i Node.js for at tillade mange operationer at ske samtidigt og dermed ikke blokere nogen bruger for at udføre en operation.

  2. Den anden kodeblok er, hvad der udføres, når tilbagekaldsfunktionen faktisk kaldes. Callback-funktionen opdaterer bare en post i vores MongoDB-database.

Så hvad er da et løfte? Et løfte er bare en forbedring af tilbagekaldsfunktioner i Node.js. I løbet af udviklingslivscyklussen kan der være en forekomst, hvor du bliver nødt til at rede flere tilbagekaldsfunktioner sammen. Dette kan blive lidt rodet og vanskeligt at vedligeholde på et bestemt tidspunkt. Kort sagt er et løfte en forbedring af tilbagekald, der ser på at afhjælpe disse problemer.

Den grundlæggende syntaks for et løfte er vist nedenfor;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • "doSomethingAync" er enhver tilbagekaldelse eller asynkron funktion, der udfører en slags behandling.
  • Denne gang, når der defineres tilbagekald, er der en værdi, der returneres kaldet et "løfte."
  • Når et løfte returneres, kan det have 2 output. Dette defineres af 'den daværende klausul'. Enten kan operationen være en succes, der betegnes med parameteren 'onFulfilled'. Eller det kan have en fejl, der betegnes med parameteren 'onRejected'.

Bemærk: Så nøgleaspektet ved et løfte er returværdien. Der er intet begreb om en returværdi, når man arbejder med normale tilbagekald i Node.js. På grund af returværdien har vi mere kontrol over, hvordan tilbagekaldsfunktionen kan defineres.

I det næste emne vil vi se et eksempel på løfter, og hvordan de drager fordel af tilbagekald.

Tilbagekaldelser til løfter

Lad os nu se på et eksempel på, hvordan vi kan bruge "løfter" fra en Node.js-applikation. For at bruge løfter i en Node.js-applikation skal modulet 'løfte' først downloades og installeres.

Vi vil derefter ændre vores kode som vist nedenfor, som opdaterer et medarbejdernavn i 'Medarbejder'-samlingen ved hjælp af løfter.

Trin 1) Installation af NPM-moduler

For at bruge løfter inde fra en Node JS-applikation kræves løftemodulet. For at installere løfte-modulet skal du køre nedenstående kommando

npm install løfte

Trin 2) Rediger koden, så den indeholder løfter

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"}});});

Kode Forklaring: -

  1. Den første del er at inkludere 'løfte-modulet, som giver os mulighed for at bruge løftefunktionaliteten i vores kode.
  2. Vi kan nu tilføje 'derefter' -funktionen til vores MongoClient.connect-funktion. Så hvad dette gør er, at når forbindelsen er oprettet til databasen, skal vi udføre det kodestykke, der er defineret derefter.
  3. Endelig definerer vi vores kodestykke, der gør arbejdet med at opdatere medarbejdernavn for medarbejderen med navnet "Martin" til "Mohan".

Bemærk:-

Hvis du nu tjekker indholdet af din MongoDB-database, vil du opdage, at hvis der findes en post med EmployeeName af "Martin", opdateres den til "Mohan."

For at kontrollere, at dataene er korrekt indsat i databasen, skal du udføre følgende kommandoer i MongoDB

  1. Brug EmployeeDB
  2. db.Employee.find ({Medarbejdernavn: Mohan})

Den første erklæring sikrer, at du har forbindelse til EmployeeDb-databasen. Den anden erklæring søger efter posten, der har medarbejdernavnet "Mohan".

Håndtering af indlejrede løfter

Når man definerer løfter, skal det bemærkes, at "dengang" -metoden i sig selv returnerer et løfte. Så på en måde kan løfter nestes eller lænkes sammen.

I eksemplet nedenfor bruger vi kæde til at definere 2 tilbagekaldsfunktioner, som begge indsætter en post i MongoDB-databasen.

( Bemærk : Kædning er et koncept, der bruges til at linke udførelse af metoder til hinanden. Antag, at hvis din applikation havde to metoder kaldet 'metode A' og 'metode B.' Og logikken var sådan, at 'metode B' skulle kaldes efter 'metode A', ' så ville du kæde udførelsen på en sådan måde, at 'metodeB' kaldes direkte efter 'metode A.'

Det vigtigste at bemærke i dette eksempel er, at koden bliver renere, læsbar og vedligeholdelig ved hjælp af indlejrede løfter.

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"})})});

Kode Forklaring: -

  1. Vi definerer nu to "så" klausuler, der bliver udført efter hinanden. I den første klausul videregiver vi parameteren 'db', der indeholder vores databaseforbindelse. Vi bruger derefter indsamlingsegenskaben for 'db' -forbindelsen til at indsætte poster i 'Medarbejder'-samlingen. Metoden 'insertOne' bruges til at indsætte det faktiske dokument i medarbejdersamlingen.
  2. Vi bruger derefter 2. afsnit så også til at indsætte en ny post i databasen.

Hvis du nu kontrollerer indholdet af din MongoDB-database, finder du de 2 poster, der er indsat i MongoDB-databasen.

Oprettelse af et brugerdefineret løfte

Et tilpasset løfte kan oprettes ved hjælp af et nodemodul kaldet 'q.' Biblioteket 'q' skal downloades og installeres ved hjælp af node-pakkehåndtering. Efter brug af 'q' biblioteket kan metoden "denodeify" kaldes, hvilket får enhver funktion til at blive en funktion, der returnerer et løfte.

I eksemplet nedenfor opretter vi en simpel funktion kaldet "Tilføj", som tilføjer 2 tal. Vi konverterer denne funktion til en funktion for at returnere et løfte.

Når det er gjort, bruger vi løftet, der returneres af funktionen Add, til at vise en besked i console.log.

Lad os følge nedenstående trin for at oprette vores brugerdefinerede funktion for at returnere et løfte.

Trin 1) Installation af NPM-moduler

For at bruge 'q' fra et Node JS-program kræves 'q' -modulet. For at installere 'q' modulet skal du køre nedenstående kommando

npm installation q

Trin 2) Definer følgende kode, der skal bruges til at oprette det brugerdefinerede løfte.

Kode Forklaring: -

  1. Den første bit er at inkludere 'q' biblioteket ved hjælp af det krævede nøgleord. Ved at bruge dette bibliotek vil vi være i stand til at definere enhver funktion til at returnere et tilbagekald.
  2. Vi opretter en funktion kaldet Tilføj, som tilføjer 2 tal defineret i variabler a og b. Summen af ​​disse værdier lagres i variabel c.
  3. Vi bruger derefter q-biblioteket til at denodificere (metoden, der bruges til at konvertere en hvilken som helst funktion til en funktion, der returnerer et løfte) vores Tilføj-funktion eller på anden måde konvertere vores Tilføj-funktion til en funktion, der returnerer et løfte.
  4. Vi kalder nu vores "Tilføj" -funktion og er i stand til at få en returløfteværdi på grund af det forudgående trin, vi udførte for at denodeify Add-funktionen.
  5. Nøgleordet 'derefter' bruges, angiver, at hvis funktionen udføres med succes, så vises strengen "Tilføjelsesfunktion afsluttet" i console.log.

Når ovenstående kode køres, vises output "Tilføjelsesfunktion afsluttet" i console.log som vist nedenfor.

Resumé

  • Brug af tilbagekaldsfunktioner i Node.js har sine ulemper. Undervejs under udviklingsprocessen kan den indlejrede brug af tilbagekaldsfunktioner gøre koden mere rodet og vanskelig at vedligeholde.
  • De fleste af problemerne med indlejrede tilbagekaldsfunktioner kan afhjælpes ved brug af løfter og generatorer i node.js
  • Et løfte er en værdi, der returneres af en asynkron funktion for at indikere afslutningen af ​​behandlingen udført af den asynkrone funktion.
  • Løfter kan indlejres i hinanden for at få koden til at se bedre ud og lettere at vedligeholde, når en asynkron funktion skal kaldes efter en anden asynkron funktion

Interessante artikler...