Node.js lubaduse õpetus
⚡ Nutikas kokkuvõte
Node.js-i lubadused asendavad sügavalt pesastatud tagasihelistamised tagastatud objektiga, mis arveldab üks kord, seega asünkroonne andmebaasitöö loetakse anonüümsete funktsioonide püramiidi asemel tasaseks siis-klauslite ahelaks.

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 kui lubadustega alustame, vaatame uuesti, mis on tagasihelistamise funktsioonid Node.jsOleme neid tagasihelistusfunktsioone eelmistes peatükkides 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”.
A lubadus istub ühes kolmest osariigist ja asustab end korra:
| riik | Tähendus |
|---|---|
| kuni | Töö pole lõppenud. |
| Täidetud | onFulfilled käivitab selle väärtusega. |
| Tõrjutud | onRejected käivitub veaga. |
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.
Versiooni märkus: need näited töötavad endiselt Node.js 24 peal, mis oli Active LTS liin aastal 2026. Alates Node.js 15-st käsitlemata tagasilükkamine lõpetab protsessi hoiatuse kuvamise asemel, seega sulge iga ahel funktsiooniga .catch().
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 uuendab lubaduste abil 'Employee' kollektsioonis olevat EmployeeName'i.
Step 1) Paigaldamine NPM-moodulid
Promise'ide kasutamiseks Node.js rakenduses on vajalik promise moodul. Promise mooduli 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ärge:
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 lause tagab ühenduse 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 sinna sisestatud MongoDB andmebaas.
Kaasaegne vaste: async ja await, mis on standardsed alates ES2017-st, tarbivad neid lubadusi ilma tagasihelistamiseta ja on suures osas asendanud generaatoripõhine Voolujuhtimise teegid nagu co, samas kui natiivne Promise'i tugi muudab q ja bluebirdi üleliigseks. Teine plokk näitab, et seejärel võetakse vastu ainult db.
Kohandatud lubaduse loomine
Kohandatud lubaduse saab luua Node.js mooduli nimega 'q' abil. 'q' teek tuleb alla laadida ja Node Package Manageri abil installida. Pärast 'q' teegi kasutamist saab kutsuda meetodit „denodeify“, mis muudab mis tahes funktsiooni lubaduse tagastavaks funktsiooniks.
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
Node.js rakenduses 'q' kasutamiseks on vajalik 'q' moodul. 'q' mooduli 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 oma Add-funktsiooni denodeifitseerimiseks (meetod, mida kasutatakse mis tahes funktsiooni teisendamiseks lubaduse tagastavaks funktsiooniks) ehk teisisõnu, Add-funktsiooni teisendamiseks lubaduse tagastavaks funktsiooniks.
- Nüüd kutsume oma funktsiooni "Lisa" ja saame tagasitõotuse väärtuse tänu eelnevale toimingule, mille tegime funktsiooni Lisa denodeifitseerimiseks.
- Märksõna 'then' kasutatakse selleks, et määrata, et funktsiooni eduka täitmise korral kuvatakse console.log-failis 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.





