Tutorial promisiune Node.js

Cuprins:

Anonim

În tutoriale anterioare, ați fi văzut funcții de apel invers care sunt utilizate pentru evenimente asincrone. Dar, uneori, funcțiile de apel invers pot deveni un coșmar atunci când încep să devină imbricate, iar programul începe să devină lung și complex.

În acest tutorial, veți învăța-

  • Ce sunt promisiunile?
  • Rambursări la promisiuni
  • Gestionarea promisiunilor cuibărite
  • Crearea unei promisiuni personalizate

Ce sunt promisiunile?

Înainte de a începe cu promisiuni, să revedem mai întâi ce sunt funcțiile de „apel invers” în Node.js. Am văzut aceste funcții de apel invers foarte mult în capitolele anterioare, așa că haideți să trecem rapid printr-una dintre ele.

Exemplul de mai jos prezintă un fragment de cod, care este utilizat pentru a vă conecta la o bază de date MongoDB și a efectua o operație de actualizare pe una dintre înregistrările din baza de date.

  1. În codul de mai sus, partea funcției (err, db) este cunoscută ca declarația unei funcții anonime sau de apel invers. Când MongoClient creează o conexiune la baza de date MongoDB, acesta va reveni la funcția de apel invers după finalizarea operației de conectare. Deci, într-un anumit sens, operațiunile de conectare se întâmplă în fundal și, atunci când se termină, apelează funcția noastră de apel invers. Amintiți-vă că acesta este unul dintre punctele cheie ale Node.js pentru a permite mai multe operații să se întâmple simultan și, astfel, să nu blocheze niciun utilizator să efectueze o operație.

  2. Al doilea bloc de cod este ceea ce se execută atunci când funcția de apel invers este efectiv apelată. Funcția de apel invers doar actualizează o înregistrare din baza noastră de date MongoDB.

Deci, ce este o promisiune atunci? Ei bine, o promisiune este doar o îmbunătățire a funcțiilor de apel invers în Node.js. În timpul ciclului de viață al dezvoltării, poate exista o instanță în care ar trebui să cuibăriți mai multe funcții de apel invers. Acest lucru poate deveni cam dezordonat și dificil de întreținut într-un anumit moment. Pe scurt, o promisiune este o îmbunătățire a apelurilor de apel care urmărește atenuarea acestor probleme.

Sintaxa de bază a unei promisiuni este prezentată mai jos;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • „doSomethingAync” este orice funcție de apel invers sau asincronă care face un fel de procesare.
  • De data aceasta, la definirea apelului invers, există o valoare care este returnată numită „promisiune”.
  • Când o promisiune este returnată, aceasta poate avea 2 ieșiri. Acest lucru este definit de „clauza atunci”. Fie operațiunea poate fi un succes care este notat de parametrul „onFulfilled”. Sau poate avea o eroare care este notată de parametrul „onRejected”.

Notă: Deci aspectul cheie al unei promisiuni este valoarea de returnare. Nu există niciun concept de valoare returnată atunci când se lucrează cu apeluri normale în Node.js. Datorită valorii returnate, avem mai mult control asupra modului în care poate fi definită funcția de apel invers.

În următorul subiect, vom vedea un exemplu de promisiuni și modul în care acestea beneficiază de apeluri de apel.

Rambursări la promisiuni

Acum să vedem un exemplu despre modul în care putem folosi „promisiunile” din cadrul unei aplicații Node.js. Pentru a utiliza promisiunile într-o aplicație Node.js, modulul „promisiune” trebuie mai întâi descărcat și instalat.

Apoi vom modifica codul nostru așa cum se arată mai jos, care actualizează un nume de angajat din colecția „Angajat” utilizând promisiuni.

Pasul 1) Instalarea modulelor NPM

Pentru a utiliza Promisiunile dintr-o aplicație Node JS, este necesar modulul promisiunii. Pentru a instala modulul promisiune, rulați comanda de mai jos

promisiunea de instalare npm

Pasul 2) Modificați codul pentru a include promisiunile

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

Cod Explicație: -

  1. Prima parte este să includem modulul „promisiune” care ne va permite să folosim funcționalitatea promisiunii în codul nostru.
  2. Acum putem adăuga funcția „atunci” la funcția noastră MongoClient.connect. Deci, ceea ce face acest lucru este că, atunci când conexiunea este stabilită la baza de date, trebuie să executăm fragmentul de cod definit ulterior.
  3. În cele din urmă, definim fragmentul nostru de cod care face lucrarea de actualizare EmployeeName a angajatului cu numele „Martin” la „Mohan”.

Notă:-

Dacă verificați acum conținutul bazei de date MongoDB, veți descoperi că, dacă există o înregistrare cu EmployeeName a „Martin”, aceasta va fi actualizată la „Mohan”.

Pentru a verifica dacă datele au fost inserate corect în baza de date, trebuie să executați următoarele comenzi în MongoDB

  1. Utilizați EmployeeDB
  2. db.Employee.find ({EmployeeName: Mohan})

Prima declarație vă asigură că sunteți conectat la baza de date EmployeeDb. A doua declarație caută înregistrarea care are numele de angajat „Mohan”.

Gestionarea promisiunilor cuibărite

La definirea promisiunilor, trebuie remarcat faptul că metoda „atunci” în sine returnează o promisiune. Deci, într-un anumit sens, promisiunile pot fi cuibărite sau înlănțuite între ele.

În exemplul de mai jos, folosim înlănțuirea pentru a defini 2 funcții de apel invers, ambele inserând o înregistrare în baza de date MongoDB.

( Notă : Înlănțuirea este un concept utilizat pentru a lega execuția metodelor între ele. Să presupunem că aplicația dvs. a avut 2 metode numite „metodăA” și „metodă B.” Și logica a fost de așa natură încât „metoda B” ar trebui numită după „metoda A” atunci ați înlănțui execuția în așa fel încât „metoda B” să fie apelată direct după „metoda A.”

Elementul cheie de menționat în acest exemplu este că codul devine mai curat, lizibil și menținut prin utilizarea promisiunilor imbricate.

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

Cod Explicație: -

  1. Acum definim 2 clauze „apoi” care sunt executate una după alta. În prima clauză de atunci, trecem parametrul „db” care conține conexiunea noastră la baza de date. Folosim apoi proprietatea de colectare a conexiunii „db” pentru a insera înregistrări în colecția „Angajat”. Metoda „insertOne” este utilizată pentru a insera documentul propriu-zis în colecția Angajaților.
  2. Folosim apoi a doua clauză apoi pentru a insera o altă înregistrare în baza de date.

Dacă verificați acum conținutul bazei de date MongoDB, veți găsi cele 2 înregistrări inserate în baza de date MongoDB.

Crearea unei promisiuni personalizate

O promisiune personalizată poate fi creată utilizând un modul nod numit „q”. Biblioteca „q” trebuie descărcată și instalată folosind managerul de pachete nod. După utilizarea bibliotecii „q”, se poate apela metoda „denodeify” care va face ca orice funcție să devină o funcție care returnează o promisiune.

În exemplul de mai jos, vom crea o funcție simplă numită „Adăugați” care va adăuga 2 numere. Vom converti această funcție într-o funcție pentru a returna o promisiune.

Odată ce ați făcut acest lucru, vom folosi promisiunea returnată de funcția Adăugare pentru a afișa un mesaj în consola.log.

Să urmăm pașii de mai jos pentru a crea funcția noastră personalizată pentru a ne întoarce o promisiune.

Pasul 1) Instalarea modulelor NPM

Pentru a utiliza „q” dintr-o aplicație Node JS, este necesar modulul „q”. Pentru a instala modulul „q”, rulați comanda de mai jos

npm instala q

Pasul 2) Definiți următorul cod care va fi utilizat pentru a crea promisiunea personalizată.

Cod Explicație: -

  1. Primul bit este să includeți biblioteca „q” utilizând cuvântul cheie require. Prin utilizarea acestei biblioteci, vom putea defini orice funcție pentru a returna un apel invers.
  2. Creăm o funcție numită Adăugare care va adăuga 2 numere definite în variabilele a și b. Suma acestor valori va fi stocată în variabila c.
  3. Folosim apoi biblioteca q pentru a denodeifica (metoda utilizată pentru a converti orice funcție într-o funcție care ar returna o promisiune) funcția noastră Adăugare sau pentru a converti funcția Adăugare într-o funcție care returnează o promisiune.
  4. Acum numim funcția noastră „Adăugare” și suntem capabili să obținem o valoare promisiune de returnare din cauza pasului anterior pe care l-am efectuat pentru a denodifica funcția Adăugare.
  5. Se folosește cuvântul cheie „atunci” specifică faptul că, dacă funcția este executată cu succes, atunci afișează șirul „Funcție de completare completată” în consola.log.

Când este rulat codul de mai sus, ieșirea „Funcție de completare completată” va fi afișată în consola.log așa cum se arată mai jos.

rezumat

  • Utilizarea funcțiilor de apel invers în Node.js are dezavantajele sale. Uneori, în timpul procesului de dezvoltare, utilizarea imbricată a funcțiilor de apel invers poate face codul mai dezordonat și dificil de întreținut.
  • Majoritatea problemelor legate de funcțiile de apel invers imbricate pot fi atenuate prin utilizarea promisiunilor și a generatoarelor din node.js
  • O promisiune este o valoare returnată de o funcție asincronă pentru a indica finalizarea procesării efectuate de funcția asincronă.
  • Promisiunile pot fi imbricate unul în celălalt pentru a face codul să arate mai bine și mai ușor de întreținut atunci când o funcție asincronă trebuie apelată după o altă funcție asincronă