Node.js lubaduse õpetus
Varasemates õpetustes oleksite näinud tagasihelistamisfunktsioone, mida kasutatakse asünkroonsete sündmuste jaoks. Kuid mõnikord võivad tagasihelistamisfunktsioonid muutuda õudusunenäoks, kui need hakkavad muutuma pesastatud ning programm muutub pikaks ja keeruliseks.
Mis on lubadused?
Enne lubadustega alustamist vaatame esmalt uuesti läbi, millised on Node.js-i tagasihelistamise funktsioonid. Oleme eelmistes peatükkides neid tagasihelistamisfunktsioone palju näinud, seega vaatame ühe neist kiiresti läbi.
Allolev näide näitab koodilõiku, mida kasutatakse ühenduse loomiseks a MongoDB andmebaasi ja tehke ühe andmebaasi kirjega värskendustoiming.
- Ülaltoodud koodis on funktsiooni osa (err,db) tuntud kui anonüümse või tagasihelistamisfunktsiooni deklaratsioon. Kui MongoClient loob ühenduse MongoDB andmebaasi, naaseb see tagasihelistamisfunktsiooni, kui ühenduse toiming on lõpule viidud. Nii et mõnes mõttes toimuvad ühenduse toimingud taustal ja kui see on tehtud, kutsub see meie tagasihelistamise funktsiooni. Pidage meeles, et see on üks Node.js-i võtmepunkte, mis võimaldavad paljudel toimingutel toimuda samaaegselt ja seega ei takista ühelgi kasutajal toimingu sooritamist.
- Teine koodiplokk käivitatakse siis, kui tagasihelistamise funktsioon tegelikult välja kutsutakse. Tagasihelistamise funktsioon värskendab ainult üht meie kirjet MongoDB andmebaas.
Mis on siis lubadus? Noh, lubadus on lihtsalt Node.js-i tagasihelistamise funktsioonide täiustus. Arenduse elutsükli jooksul võib juhtuda, et peate mitu tagasihelistamisfunktsiooni kokku pesastama. See võib teatud ajahetkel muutuda segaseks ja seda on raske hooldada. Lühidalt öeldes on lubadus tagasihelistamiste täiustus, mille eesmärk on nende probleemide leevendamine.
Lubaduse põhisüntaks on näidatud allpool;
var promise = doSomethingAync() promise.then(onFulfilled, onRejected)
- „doSomethingAync” on mis tahes tagasihelistamis- või asünkroonne funktsioon, mis teeb mingisuguse töötlemise.
- Seekord on tagasihelistamise määratlemisel väärtus, mis tagastatakse, mida nimetatakse lubaduseks.
- Kui lubadus tagastatakse, võib sellel olla 2 väljundit. See on määratletud klausliga „siis”. Toiming võib olla edukas, mida tähistatakse parameetriga „onFulfilled”. Või võib sellel olla viga, mida tähistatakse parameetriga „onRejected”.
Märge: Seega on lubaduse põhiaspektiks tagastatav väärtus. Node.js-is tavapäraste tagasihelistamisega töötamisel ei ole tagastusväärtuse kontseptsiooni. Tagastusväärtuse tõttu on meil rohkem kontrolli selle üle, kuidas tagasihelistamisfunktsiooni saab määratleda.
Järgmises teemas näeme näidet lubadustest ja sellest, kuidas neile tagasihelistamisest kasu on.
Tagasikutsumine lubadustele
Vaatame nüüd näidet selle kohta, kuidas saame Node.js-i rakenduses kasutada lubadusi. Lubaduste kasutamiseks Node.js rakenduses tuleb esmalt alla laadida ja installida lubadusmoodul.
Seejärel muudame oma koodi allpool näidatud viisil, mis värskendab lubaduste abil töötaja nime kogus "Töötaja".
Step 1) NPM-moodulite installimine
Lubaduste kasutamiseks Node JS-i rakenduses on lubaduse moodul nõutav. Lubadusmooduli installimiseks käivitage allolev käsk
npm installi lubadus
Step 2) 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"
}
});
});
Code Selgitus:-
- Esimene osa on mooduli "lubadus" kaasamine, mis võimaldab meil kasutada lubaduse funktsiooni meie koodis.
- Nüüd saame lisada funktsiooni "siis" oma funktsioonile MongoClient.connect. See tähendab, et kui andmebaasiga ühendus luuakse, peame käivitama seejärel määratletud koodijupi.
- Lõpuks määratleme oma koodilõigu, mis värskendab Martini nimega töötaja EmployeeName nimeks Mohan.
Märkus: -
Kui kontrollite nüüd oma MongoDB andmebaasist leiate, et kui on olemas kirje EmployeeName nimega "Martin", värskendatakse seda nimega "Mohan".
Et kontrollida, kas andmed on andmebaasi õigesti sisestatud, peate sisestama järgmised käsud MongoDB
- Kasutage EmployeeDB-d
- db.Employee.find({Töötajanimi :Mohan })
Esimene väide tagab, et olete ühenduses EmployeeDb andmebaasiga. Teine lause otsib kirjet, mille töötaja nimi on "Mohan".
Pesastatud lubadustega tegelemine
Lubaduste määratlemisel tuleb tähele panna, et meetod “siis” ise tagastab lubaduse. Nii et teatud mõttes saab lubadusi üksteise külge pesastada või aheldada.
Allolevas näites kasutame aheldamist, et määratleda 2 tagasihelistamisfunktsiooni, mis mõlemad sisestavad kirje MongoDB andmebaas.
(märkused: Aheldamine on kontseptsioon, mida kasutatakse meetodite täitmise omavaheliseks sidumiseks. Oletagem, et teie rakendusel on kaks meetodit, mida nimetatakse meetodiks A ja meetodiks B. Ja loogika oli selline, et "methodB" tuleks kutsuda pärast "methodA", siis aheldasite täitmise nii, et "methodB" kutsutakse otse pärast "methodA".)
Peamine asi, mida selles näites tähele panna, on see, et kood muutub puhtamaks, loetavamaks ja hooldatavaks, kasutades pesastatud lubadusi.
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 Selgitus:-
- Nüüd määratleme 2 "siis" klauslit, mis täidetakse üksteise järel. Esimeses klauslis edastame parameetri "db", mis sisaldab meie andmebaasiühendust. Seejärel kasutame "db" ühenduse koguomadust, et sisestada kirjed kogusse "Töötaja". Meetodit "insertOne" kasutatakse tegeliku dokumendi lisamiseks kogusse Töötaja.
- Seejärel kasutame 2nd seejärel klausel ka teise kirje lisamiseks andmebaasi.
Kui kontrollite nüüd oma MongoDB andmebaasi, leiate 2 kirjet sisestatud MongoDB andmebaas.
Kohandatud lubaduse loomine
Kohandatud lubaduse saab luua, kasutades sõlme moodulit nimega "q". Teek 'q' tuleb alla laadida ja installida sõlme paketihalduri abil. Pärast 'q' teegi kasutamist saab kutsuda meetodit "denodeify", mis muudab mis tahes funktsiooni funktsiooniks, mis tagastab lubaduse.
Allolevas näites loome lihtsa funktsiooni nimega "Lisa", mis lisab 2 numbrit. Teisendame selle funktsiooni lubaduse tagastamise funktsiooniks.
Kui see on tehtud, kasutame funktsiooni Lisa tagastatud lubadust, et kuvada teade failis console.log.
Lubaduse tagastamiseks kohandatud funktsiooni loomiseks järgime allolevaid samme.
Step 1) NPM-moodulite installimine
Funktsiooni q kasutamiseks Node JS-i rakenduses on vaja moodulit q. Mooduli "q" installimiseks käivitage allolev käsk
npm install q
Step 2) Määratlege järgmine kood, mida kasutatakse kohandatud lubaduse loomiseks.
Code Selgitus:-
- Esimene bitt on 'q' teegi kaasamine, kasutades selleks märksõna nõudmist. Seda teeki kasutades saame määratleda mis tahes funktsiooni tagasihelistamise tagastamiseks.
- Loome funktsiooni nimega Add, mis liidab 2 muutujates a ja b määratletud numbrit. Nende väärtuste summa salvestatakse muutujasse c.
- Seejärel kasutame q-teeki, et denodeifitseerida (meetod, mida kasutatakse mis tahes funktsiooni teisendamiseks funktsiooniks, mis annaks lubaduse) funktsiooni Lisa või muul viisil teisendada funktsiooni Lisa funktsiooniks, mis tagastab lubaduse.
- Nüüd kutsume oma funktsiooni "Lisa" ja saame tagasitõotuse väärtuse tänu eelnevale toimingule, mille tegime funktsiooni Lisa denodeifitseerimiseks.
- Kasutatav märksõna 'siis' täpsustab, et kui funktsioon on edukalt käivitatud, kuvatakse failis console.log string "Lisamisfunktsioon on lõpetatud".
Kui ülaltoodud kood on käivitatud, kuvatakse failis console.log väljund "Lisamisfunktsioon on lõpetatud", nagu allpool näidatud.
kokkuvõte
- Tagasihelistamisfunktsioonide kasutamisel failis Node.js on omad puudused. Mõnikord võib arendusprotsessi käigus tagasihelistamisfunktsioonide pesastatud kasutamine muuta koodi segasemaks ja raskesti hooldatavaks.
- Enamikku pesastatud tagasihelistamise funktsioonidega seotud probleeme saab leevendada lubaduste ja generaatorite kasutamisega node.js
- Lubadus on asünkroonse funktsiooni poolt tagastatav väärtus, mis näitab asünkroonse funktsiooni poolt teostatud töötlemise lõpetamist.
- Lubadusi saab üksteise sisse pesastada, et muuta kood paremaks ja hõlpsamini hooldatavaks, kui asünkroonset funktsiooni on vaja teise asünkroonse funktsiooni järel kutsuda





