Node.js lubaduste õpetus

Lang L: none (table-of-contents):

Anonim

Eelmistes õpetustes oleksite näinud tagasihelistamisfunktsioone, mida kasutatakse asünkroonsete sündmuste jaoks. Kuid mõnikord võivad tagasihelistamisfunktsioonid muutuda õudusunenäoks, kui nad hakkavad pesitsema ja programm hakkab muutuma pikaks ja keerukaks.

Selles õpetuses saate teada

  • Mis on lubadused?
  • Tagasihelistamised lubadustele
  • Pesastatud lubadustega tegelemine
  • Kohandatud lubaduse loomine

Mis on lubadused?

Enne lubadustega alustamist vaatame kõigepealt uuesti läbi Node.js "tagasihelistamise" funktsioonid. Neid tagasihelistamisfunktsioone oleme eelmistes peatükkides palju näinud, nii et vaatame ühe neist kiiresti läbi.

Allpool toodud näide näitab koodilõiku, mida kasutatakse ühenduse loomiseks MongoDB andmebaasiga ja värskendustoimingu sooritamiseks ühes andmebaasi kirjes.

  1. Ülaltoodud koodis nimetatakse funktsiooni osa (err, db) anonüümse või tagasihelistamisfunktsiooni deklaratsiooniks. Kui MongoClient loob ühenduse MongoDB andmebaasiga, naaseb ta pärast ühenduse loomise lõpetamist tagasihelistamisfunktsiooni. Nii et mõnes mõttes toimuvad ühenduse toimingud taustal ja kui see on tehtud, kutsub see meie tagasihelistamisfunktsiooni. Pidage meeles, et see on üks Node.js-i põhipunktidest, mis võimaldab paljudel toimingutel samaaegselt toimuda ja ei takista seega ühtegi kasutajat toimingut sooritamast.

  2. Teine koodiplokk käivitatakse siis, kui tagasihelistamisfunktsioon tegelikult välja kutsutakse. Tagasihelistamisfunktsioon värskendab lihtsalt ühte kirjet meie MongoDB andmebaasis.

Mis on siis lubadus? Noh, lubadus on lihtsalt Node.js tagasihelistamisfunktsioonide täiustus. Arenduse elutsükli jooksul võib esineda näide, kus peate pesama mitu tagasihelistamisfunktsiooni koos. See võib teatud ajahetkel kuidagi segaseks minna ja seda on raske hooldada. Lühidalt, lubadus on tagasihelistamise täiustus, mis on suunatud nende probleemide leevendamisele.

Lubaduse põhisüntaks on toodud allpool;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • "doSomethingAync" on mis tahes tagasihelistamis- või asünkroonne funktsioon, mis teeb mingisuguse töötluse.
  • Seekord on tagasihelistamise määramisel väärtus, mis tagastatakse nimega "lubadus".
  • Kui lubadus tagastatakse, võib sellel olla 2 väljundit. Selle määratleb „siis klausel”. Mõlemad toimingud võivad olla edukad, mida tähistatakse parameetriga 'onFulfilled'. Või võib sellel olla viga, mida tähistatakse parameetriga 'onRejected'.

Märkus. Nii et lubaduse peamine aspekt on tagastusväärtus. Node.js-is tavaliste tagasihelistustega töötamisel pole tagastusväärtuse mõistet. Tagasiväärtuse tõttu on meil rohkem kontrolli selle kohta, kuidas tagasihelistamisfunktsiooni saab määratleda.

Järgmises teemas näeme lubaduste näidet ja seda, kuidas neile tagasihelistamine on kasulik.

Tagasihelistamised lubadustele

Vaatame nüüd näidet selle kohta, kuidas saaksime Node.js rakenduses "lubadusi" kasutada. Lubaduste kasutamiseks Node.js-i rakenduses tuleb kõigepealt alla laadida ja installida moodul 'lubadus'.

Seejärel muudame oma koodi, nagu allpool näidatud, mis lubaduste abil värskendab kollektsiooni "Töötaja" töötajanime.

Samm 1) NPM-moodulite installimine

Node JS-i rakenduse lubaduste kasutamiseks on vajalik lubaduse moodul. Lubadusemooduli installimiseks käivitage järgmine käsk

npm installimise lubadus

2. samm. Muutke koodi lubaduste lisamiseks

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

Koodi selgitus: -

  1. Esimene osa on lisada lubaduse moodul, mis võimaldab meil lubaduse funktsionaalsust oma koodis kasutada.
  2. Nüüd saame funktsiooni „siis” lisada meie funktsioonile MongoClient.connect. Nii et see on see, et kui ühendus andmebaasiga on loodud, peame käivitama pärast seda määratletud koodilõigu.
  3. Lõpuks määratleme oma koodilõigu, mis ajakohastab töötaja EmployeeName töötaja nimega "Martin" "Mohan" -iks.

Märge:-

Kui kontrollite nüüd oma MongoDB andmebaasi sisu, leiate, et kui on olemas kirje EmployeeName'iga "Martin", värskendatakse see nimeks "Mohan".

Andmete andmebaasi õigesti sisestamise kontrollimiseks peate MongoDB-s täitma järgmised käsud

  1. Kasutage EmployeeDB-d
  2. db.Employee.find ({TöötajaNimi: Mohan})

Esimene väide tagab, et olete ühendatud EmployeeDb andmebaasiga. Teises avalduses otsitakse kirjet, millel on töötaja nimi "Mohan".

Pesastatud lubadustega tegelemine

Lubaduste määratlemisel tuleb märkida, et meetod "siis" annab ise lubaduse. Nii et mõnes mõttes võib lubadusi omavahel pesitseda või aheldada.

Allpool toodud näites kasutame ahelat määrates 2 tagasihelistamisfunktsiooni, mis mõlemad sisestavad MongoDB andmebaasi kirje.

( Märkus : aheldamine on mõiste, mida kasutatakse meetodite täitmise linkimiseks üksteisega. Oletame, et kui teie rakendusel oli 2 meetodit nimega "methodA" ja "methodB". Ja loogika oli selline, et "methodA" tuleks kutsuda "methodA" järele siis aheldaksite täitmise niimoodi, et 'meetodB' kutsutakse kohe pärast meetodit '.

Selles näites on oluline märkida, et kood muutub pesastatud lubaduste abil puhtamaks, loetavamaks ja hooldatavamaks.

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

Koodi selgitus: -

  1. Nüüd määratleme 2 "siis" klauslit, mis täidetakse üksteise järel. Esimeses seejärel klauslis edastame parameetri 'db', mis sisaldab meie andmebaasiühendust. Seejärel kasutame ühenduse db db atribuuti kirjete sisestamiseks kollektsiooni 'Employee'. "InsertOne" meetodit kasutatakse tegeliku dokumendi sisestamiseks töötajate kollektsiooni.
  2. Seejärel kasutame teist ja siis klauslit ka teise kirje sisestamiseks andmebaasi.

Kui kontrollite nüüd oma MongoDB andmebaasi sisu, leiate 2 kirjet sisestatud MongoDB andmebaasi.

Kohandatud lubaduse loomine

Kohandatud lubaduse saab luua sõlmemooduli nimega 'q'. 'Q' teek tuleb alla laadida ja installida sõlmpaketi halduri abil. Pärast 'q' teegi kasutamist saab kutsuda meetodi "denodeify", mis põhjustab mis tahes funktsioonist funktsiooni, mis annab lubaduse.

Allpool toodud näites loome lihtsa funktsiooni nimega "Lisa", mis lisab 2 numbrit. Teisendame selle funktsiooni lubaduse tagastamiseks funktsiooniks.

Kui see on tehtud, kasutame funktsiooni Lisa tagastatud lubadust sõnumi kuvamiseks konsoolis.log.

Lubaduse tagastamiseks järgime alltoodud samme kohandatud funktsiooni loomiseks.

Samm 1) NPM-moodulite installimine

'Q' kasutamiseks Node JS-i rakenduses on vajalik moodul 'q'. Mooduli 'q' installimiseks käivitage järgmine käsk

npm install q

2. samm. Määratlege järgmine kood, mida kasutatakse kohandatud lubaduse loomiseks.

Koodi selgitus: -

  1. Esimene bitt on lisada q-teek, kasutades märksõna nõuda. Selle teegi abil saame määrata mis tahes funktsiooni tagasihelistamise tagastamiseks.
  2. Loome funktsiooni Add, mis lisab 2 arvu, mis on määratletud muutujates a ja b. Nende väärtuste summa salvestatakse muutujasse c.
  3. Seejärel kasutame q-teeki (meetod, mille abil muudetakse mis tahes funktsioon funktsiooniks, mis tagastaks lubaduse) meie funktsiooni Add lisamiseks või muul viisil meie funktsiooni Add teisendamiseks funktsiooniks, mis tagastab lubaduse.
  4. Nüüd kutsume oma funktsiooni "Lisa" ja võime saada tagasi lubaduse väärtuse funktsiooni Lisa denodeerimise eelneva sammu tõttu.
  5. Märksõna 'siis' abil saate täpsustada, et kui funktsioon on edukalt käivitatud, kuvage konsoolis.log string "Lisamisfunktsioon lõpetatud".

Kui ülaltoodud kood on käivitatud, kuvatakse console.logis väljund "Lisamisfunktsioon lõpetatud", nagu allpool näidatud.

Kokkuvõte

  • Tagasihelistamisfunktsioonide kasutamisel Node.js-is on omad puudused. Mõnikord võib tagasihelistamisfunktsioonide pesastatud kasutamine muuta koodi keskpärasemaks ja seda on raske hooldada.
  • Enamikku sisestatud tagasihelistamisfunktsioonidega seotud probleeme saab leevendada lubaduste ja generaatorite kasutamisega node.js-is
  • Lubadus on asünkroonse funktsiooni tagastatud väärtus, mis näitab asünkroonse funktsiooni poolt läbiviidud töötluse lõppu.
  • Lubadusi saab üksteise sisse pesitseda, et muuta kood paremaks ja hõlpsamini hooldatavaks, kui asünkroonne funktsioon tuleb kutsuda teise asünkroonse funktsiooni järel