Node.js Promise Tutorial

Innholdsfortegnelse:

Anonim

I tidligere veiledninger hadde du sett tilbakeringingsfunksjoner som brukes til asynkrone hendelser. Men noen ganger kan tilbakeringingsfunksjoner bli et mareritt når de begynner å bli nestet, og programmet begynner å bli langt og komplekst.

I denne veiledningen vil du lære-

  • Hva er løfter?
  • Tilbakekallinger til løfter
  • Å takle nestede løfter
  • Å lage et tilpasset løfte

Hva er løfter?

Før vi begynner med løfter, la oss først se på hva som er "tilbakering" -funksjoner i Node.js. Vi har sett disse tilbakeringingsfunksjonene mye i de forrige kapitlene, så la oss raskt gå gjennom en av dem.

Eksemplet nedenfor viser et kodebit som brukes til å koble til en MongoDB-database og utføre en oppdateringsoperasjon på en av postene i databasen.

  1. I koden ovenfor er den delen av funksjonen (err, db) kjent som erklæringen om en anonym eller tilbakeringingsfunksjon. Når MongoClient oppretter en forbindelse til MongoDB-databasen, vil den gå tilbake til tilbakeringingsfunksjonen når tilkoblingsoperasjonen er fullført. Så på en måte skjer tilkoblingsoperasjonene i bakgrunnen, og når det er gjort, kaller det tilbakeringingsfunksjonen vår. Husk at dette er et av nøkkelpunktene i Node.js for å tillate at mange operasjoner skjer samtidig og dermed ikke blokkerer noen brukere fra å utføre en operasjon.

  2. Den andre kodeblokken er det som blir utført når tilbakeringingsfunksjonen faktisk kalles. Tilbakeringingsfunksjonen oppdaterer bare en post i MongoDB-databasen vår.

Så hva er et løfte da? Vel, et løfte er bare en forbedring av tilbakeringingsfunksjonene i Node.js. I løpet av utviklingslivssyklusen kan det være en forekomst der du trenger å hekke flere tilbakeringingsfunksjoner sammen. Dette kan bli litt rotete og vanskelig å vedlikeholde på et bestemt tidspunkt. Kort sagt, et løfte er en forbedring av tilbakeringinger som ser på å lindre disse problemene.

Den grunnleggende syntaksen for et løfte er vist nedenfor;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • "doSomethingAync" er en tilbakeringing eller asynkron funksjon som utfører en slags behandling.
  • Denne gangen, når du definerer tilbakeringing, er det en verdi som blir returnert kalt et "løfte".
  • Når et løfte returneres, kan det ha to utganger. Dette er definert av 'da-klausulen'. Enten kan operasjonen være en suksess som betegnes med 'onFulfilled' -parameteren. Eller det kan ha en feil som er angitt med parameteren 'onRejected'.

Merk: Så det viktigste aspektet ved et løfte er returverdien. Det er ikke noe konsept med en returverdi når du arbeider med normale tilbakeringinger i Node.js. På grunn av returverdien har vi mer kontroll over hvordan tilbakeringingsfunksjonen kan defineres.

I neste tema vil vi se et eksempel på løfter og hvordan de drar nytte av tilbakeringing.

Tilbakekallinger til løfter

La oss nå se på et eksempel på hvordan vi kan bruke "løfter" fra et Node.js-program. For å kunne bruke løfter i et Node.js-program, må 'løfte-modulen først lastes ned og installeres.

Vi vil da endre koden vår som vist nedenfor, som oppdaterer et ansattnavn i 'ansattesamlingen' ved å bruke løfter.

Trinn 1) Installere NPM-modulene

For å bruke løfter fra et Node JS-program, er løftemodulen påkrevd. For å installere løfte-modulen, kjør kommandoen nedenfor

npm installer løfte

Trinn 2) Endre koden for å inkludere 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 delen er å inkludere 'løfte-modulen' som lar oss bruke løftefunksjonaliteten i koden vår.
  2. Vi kan nå legge til 'da' -funksjonen til MongoClient.connect-funksjonen. Så hva dette gjør er at når forbindelsen er opprettet til databasen, må vi utføre kodebiten som er definert deretter.
  3. Til slutt definerer vi kodebiten vår som gjør arbeidet med å oppdatere EmployeeName til den ansatte med navnet "Martin" til "Mohan".

Merk:-

Hvis du nå sjekker innholdet i MongoDB-databasen din, vil du oppdage at hvis det finnes en post med EmployeeName av "Martin", vil den bli oppdatert til "Mohan."

For å kontrollere at dataene er riktig satt inn i databasen, må du utføre følgende kommandoer i MongoDB

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

Den første uttalelsen sikrer at du er koblet til EmployeeDb-databasen. Den andre uttalelsen søker etter posten som har ansattes navn "Mohan".

Å takle nestede løfter

Når man definerer løfter, må det bemerkes at "da" -metoden i seg selv gir et løfte. Så på en måte kan løfter nestes eller lenkes til hverandre.

I eksemplet nedenfor bruker vi chaining til å definere to tilbakeringingsfunksjoner, som begge setter inn en post i MongoDB-databasen.

( Merk : Kjetting er et konsept som brukes til å koble kjøring av metoder til hverandre. Anta at hvis applikasjonen din hadde to metoder kalt 'metode A' og 'metode B.' Og logikken var slik at 'metode B' skulle kalles etter 'metode A', ' da vil du kjede kjøringen på en slik måte at 'metode B' blir kalt direkte etter 'metode A.'

Det viktigste å merke seg i dette eksemplet er at koden blir renere, lesbar og vedlikeholdbar ved å bruke nestede 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 nå to "da" -klausuler som blir henrettet etter hverandre. I den første klausulen sender vi parameteren 'db' som inneholder databaseforbindelsen. Vi bruker deretter samleegenskapen til 'db' -forbindelsen for å sette inn poster i samlingen 'Ansatt'. Metoden 'insertOne' brukes til å sette inn det faktiske dokumentet i ansattesamlingen.
  2. Vi deretter bruke 2 nd da klausulen også å sette inn en annen post i databasen.

Hvis du nå sjekker innholdet i MongoDB-databasen din, vil du finne de 2 postene som er satt inn i MongoDB-databasen.

Å lage et tilpasset løfte

Et tilpasset løfte kan opprettes ved å bruke en nodemodul kalt 'q.' Biblioteket 'q' må lastes ned og installeres ved hjelp av node-pakkebehandling. Etter å ha brukt 'q' biblioteket, kan metoden "denodeify" kalles som vil føre til at enhver funksjon blir en funksjon som gir et løfte.

I eksemplet nedenfor vil vi lage en enkel funksjon kalt "Add" som vil legge til 2 tall. Vi vil konvertere denne funksjonen til en funksjon for å gi et løfte.

Når det er gjort, vil vi bruke løftet som returneres av Legg til-funksjonen for å vise en melding i console.log.

La oss følge trinnene nedenfor for å lage vår tilpassede funksjon for å gi et løfte.

Trinn 1) Installere NPM-modulene

For å bruke 'q' fra et Node JS-program, kreves 'q' -modulen. For å installere 'q' -modulen, kjør kommandoen nedenfor

npm installer q

Trinn 2) Definer følgende kode som skal brukes til å opprette det tilpassede løftet.

Kode Forklaring: -

  1. Den første biten er å inkludere 'q' biblioteket ved å bruke det nødvendige nøkkelordet. Ved å bruke dette biblioteket vil vi kunne definere hvilken som helst funksjon for å returnere en tilbakeringing.
  2. Vi lager en funksjon kalt Legg til som vil legge til 2 tall definert i variablene a og b. Summen av disse verdiene vil bli lagret i variabel c.
  3. Vi bruker deretter q-biblioteket til å avkode (metoden som brukes til å konvertere en hvilken som helst funksjon til en funksjon som vil gi et løfte) vår Add-funksjon eller på annen måte konvertere vår Add-funksjon til en funksjon som returnerer et løfte.
  4. Vi kaller nå vår "Legg til" -funksjon og er i stand til å få en returløfteverdi på grunn av det forrige trinnet vi utførte for å avkode Add-funksjonen.
  5. Nøkkelordet 'da' brukes, angir at hvis funksjonen er utført vellykket, så vises strengen "Tilleggsfunksjon fullført" i console.log.

Når koden ovenfor kjøres, vil utdataene "Tilleggsfunksjon fullført" vises i console.log som vist nedenfor.

Sammendrag

  • Å bruke tilbakeringingsfunksjoner i Node.js har sine ulemper. Noen ganger under utviklingsprosessen kan den nestede bruken av tilbakeringingsfunksjoner gjøre koden messere og vanskelig å vedlikeholde.
  • De fleste av problemene med nestede tilbakeringingsfunksjoner kan avbøtes ved bruk av løfter og generatorer i node.js
  • Et løfte er en verdi som returneres av en asynkron funksjon for å indikere fullføringen av behandlingen som utføres av den asynkrone funksjonen.
  • Løfter kan være nestet i hverandre for å få koden til å se bedre ut og lettere å opprettholde når en asynkron funksjon må kalles etter en annen asynkron funksjon