Ankstesnėse mokymo programose būtumėte matę atgalinio ryšio funkcijas, kurios naudojamos asinchroniniams įvykiams. Tačiau kartais perskambinimo funkcijos gali tapti košmaru, kai jos pradeda būti įdėtos, o programa pradeda tapti ilga ir sudėtinga.
Šioje pamokoje sužinosite
- Kas yra pažadai?
- Atsišaukimai į pažadus
- Spręsti įdėtus pažadus
- Kurti individualų pažadą
Kas yra pažadai?
Prieš pradėdami nuo pažadų, pirmiausia peržiūrėkime, kokios yra „callback“ funkcijos „Node.js“. Mes daug matėme šias atgalinio ryšio funkcijas ankstesniuose skyriuose, todėl greitai pereikime vieną iš jų.
Žemiau pateiktame pavyzdyje rodomas kodo fragmentas, naudojamas prisijungiant prie „MongoDB“ duomenų bazės ir atliekant vieno iš duomenų bazės įrašų atnaujinimo operaciją.
-
Ankstesniame kode funkcijos dalis (err, db) yra žinoma kaip anoniminės arba atgalinio skambučio funkcijos deklaravimas. Kai „MongoClient“ sukuria ryšį su „MongoDB“ duomenų baze, baigus prisijungti, jis grįš į atgalinio skambinimo funkciją. Taigi tam tikra prasme ryšio operacijos vyksta fone, ir kai tai bus padaryta, ji iškvies mūsų skambinimo funkciją. Atminkite, kad tai yra vienas iš pagrindinių „Node.js“ taškų, leidžiantis daugeliui operacijų vykti vienu metu ir taip netrukdantis vartotojui atlikti operacijos.
-
Antrasis kodo blokas vykdomas, kai iš tikrųjų iškviečiama atgalinio ryšio funkcija. Atšaukimo funkcija tik atnaujina vieną įrašą mūsų MongoDB duomenų bazėje.
Taigi, koks tada yra pažadas? Na, pažadas yra tik „Node.js“ atgalinio ryšio funkcijų patobulinimas. Kūrimo gyvavimo ciklo metu gali būti atvejų, kai jums reikės susieti kelias atgalinio ryšio funkcijas. Tam tikru laiko momentu tai gali tapti kažkokia netvarkinga ir sunku prižiūrėti. Trumpai tariant, pažadas yra atgalinių skambučių patobulinimas, kuriuo siekiama palengvinti šias problemas.
Pagrindinė pažado sintaksė parodyta žemiau;
var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
- "doSomethingAync" yra bet kokia atgalinio skambučio ar asinchroninė funkcija, atliekanti tam tikrą apdorojimą.
- Šį kartą, nustatant atgalinį skambutį, yra vertė, kuri yra grąžinta, vadinama „pažadu“.
- Kai pažadas grąžinamas, jis gali turėti 2 išvestis. Tai apibrėžiama „tada sąlyga“. Bet kuri operacija gali būti sėkminga, kurią žymi parametras „onFulfilled“. Arba gali būti klaida, kurią žymi parametras „onRejected“.
Pastaba: Taigi pagrindinis pažado aspektas yra grąžos vertė. Nėra grąžinimo vertės sampratos dirbant su įprastais „Node.js“ skambučiais. Dėl grąžinimo vertės mes geriau kontroliuojame, kaip galima nustatyti atgalinio skambinimo funkciją.
Kitoje temoje pamatysime pažadų pavyzdį ir tai, kaip jiems naudingi skambučiai.
Atsišaukimai į pažadus
Dabar pažvelkime į pavyzdžius, kaip galime naudoti „pažadus“ iš „Node.js“ programos. Norint naudoti pažadus „Node.js“ programoje, pirmiausia reikia atsisiųsti ir įdiegti „pažadų“ modulį.
Tada pakeisime savo kodą, kaip parodyta žemiau, kuris atnaujina „Employee“ vardą „Employee“ kolekcijoje, naudodamas pažadus.
1 žingsnis) Įdiekite NPM modulius
Norint naudoti pažadus iš „Node JS“ programos, reikalingas pažadų modulis. Norėdami įdiegti pažadų modulį, vykdykite toliau pateiktą komandą
npm įdiegti pažadą
2 žingsnis) Pakeiskite kodą, kad būtų įtraukti pažadai
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"}});});
Kodo paaiškinimas: -
- Pirmoji dalis yra „pažadų“ modulio įtraukimas, kuris leis mums naudoti pažadų funkciją savo kode.
- Dabar galime pridėti funkciją „tada“ prie savo funkcijos „MongoClient.connect“. Taigi, tai, kad užmezgus ryšį su duomenų baze, turime atlikti po to apibrėžtą kodo fragmentą.
- Galiausiai mes apibrėžiame savo kodo fragmentą, kuris atlieka darbuotojo „EmployeeName“ pavadinimo „Martin“ atnaujinimą į „Mohan“.
Pastaba: -
Jei dabar patikrinsite savo „MongoDB“ duomenų bazės turinį, pamatysite, kad jei įrašas su „EmployeeName“ yra „Martin“, jis bus atnaujintas į „Mohan“.
Norėdami patikrinti, ar duomenys tinkamai įterpti į duomenų bazę, turite atlikti šias komandas „MongoDB“
- Naudokite „EmployeeDB“
- db.Employee.find ({Darbuotojo vardas: Mohanas})
Pirmasis teiginys užtikrina, kad esate prisijungę prie „EmployeeDb“ duomenų bazės. Antrame pareiškime ieškoma įrašo, kuriame yra darbuotojo vardas „Mohan“.
Spręsti įdėtus pažadus
Apibrėžiant pažadus, reikia pažymėti, kad pats metodas „tada“ grąžina pažadą. Taigi tam tikra prasme pažadai gali būti tarpusavyje susieti arba susieti grandinėmis.
Toliau pateiktame pavyzdyje mes naudojame grandinę apibrėždami 2 atgalinio ryšio funkcijas, kurios abi įterpia įrašą į „MongoDB“ duomenų bazę.
( Pastaba : grandinė yra sąvoka, naudojama susieti metodų vykdymą tarpusavyje. Tarkime, jei jūsų programa turėjo 2 metodus, vadinamus „methodA“ ir „methodB“. Ir logika buvo tokia, kad „methodB“ turėtų būti iškviestas po „methodA“. tada grandinę vykdysite taip, kad „methodB“ būtų iškviestas iškart po „methodA“.)
Svarbiausia atkreipti dėmesį į šį pavyzdį, kad kodas tampa švaresnis, įskaitomas ir prižiūrimas naudojant įdėtus pažadus.
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"})})});
Kodo paaiškinimas: -
- Dabar mes apibrėžiame 2 „tada“ sąlygas, kurios vykdomos viena po kitos. Pirmajame tada sakinyje mes perduodame „db“ parametrą, kuriame yra mūsų duomenų bazės ryšys. Tada mes naudojame „db“ ryšio ypatybę, kad įterptume įrašus į „Employee“ kolekciją. „InsertOne“ metodas naudojamas faktiniam dokumentui įterpti į „Employee“ kolekciją.
- Tada mes naudojame antrą ir tada sąlygą, kad į duomenų bazę įterptume dar vieną įrašą.
Jei dabar patikrinsite savo „MongoDB“ duomenų bazės turinį, 2 įrašai bus įterpti į „MongoDB“ duomenų bazę.
Kurti individualų pažadą
Pasirinktinį pažadą galima sukurti naudojant mazgo modulį, vadinamą „q“. „Q“ biblioteką reikia atsisiųsti ir įdiegti naudojant mazgo paketų tvarkyklę. Panaudojus „q“ biblioteką, gali būti iškviestas metodas „denodeify“, dėl kurio bet kuri funkcija taps funkcija, kuri grąžins pažadą.
Toliau pateiktame pavyzdyje sukursime paprastą funkciją pavadinimu „Pridėti“, kuri pridės 2 skaičius. Mes paversime šią funkciją funkcija grąžinti pažadą.
Kai tai bus padaryta, mes naudosime pažadą, kurį grąžino funkcija Pridėti, norėdami parodyti pranešimą konsolėje.log.
Atlikime toliau nurodytus veiksmus, kad sukurtume savo pasirinktinę funkciją, kad grąžintume pažadą.
1 žingsnis) Įdiekite NPM modulius
Norint naudoti „q“ iš „Node JS“ programos, reikalingas „q“ modulis. Norėdami įdiegti „q“ modulį, vykdykite toliau pateiktą komandą
npm įdiegti q
2 žingsnis. Apibrėžkite šį kodą, kuris bus naudojamas kuriant pasirinktinį pažadą.
Kodo paaiškinimas: -
- Pirmiausia reikia įtraukti „q“ biblioteką, naudojant reikalingą raktinį žodį. Naudodamiesi šia biblioteka, mes galėsime apibrėžti bet kurią funkciją, kad būtų galima grąžinti atgalinį skambutį.
- Mes kuriame funkciją Add, kuri pridės 2 skaičius, apibrėžtus kintamuosiuose a ir b. Šių verčių suma bus saugoma kintamajame c.
- Tada mes naudojame q biblioteką, norėdami denoduoti (metodas, naudojamas bet kokiai funkcijai paversti funkcija, kuri grąžintų pažadą) mūsų funkcijai Add arba kitaip paversti funkciją Add į funkciją, kuri grąžina pažadą.
- Dabar mes vadiname savo funkciją „Pridėti“ ir galime gauti grąžinimo pažadų vertę dėl ankstesnio veiksmo, kurį atlikome, kad denoduotume funkciją Pridėti.
- Raktinis žodis „tada“ nurodo, kad jei funkcija vykdoma sėkmingai, konsolėje.log pateikite eilutę „Papildymo funkcija baigta“.
Paleidus pirmiau nurodytą kodą, išvestis „Papildymo funkcija baigta“ bus rodoma konsolėje.log, kaip parodyta žemiau.
Santrauka
- Atšaukimo funkcijų naudojimas „Node.js“ turi savo trūkumų. Kartais kūrimo metu įdėtas atgalinio ryšio funkcijų naudojimas gali padaryti kodą paprastesnį ir sunkiau prižiūrimą.
- Daugumą problemų, susijusių su įterptomis atgalinio skambinimo funkcijomis, galima sušvelninti naudojant pažadus ir generatorius node.js
- Pažadas yra asinchroninės funkcijos grąžinta vertė, rodanti asinchroninės funkcijos atlikto apdorojimo pabaigą.
- Pažadai gali būti įdėti vienas į kitą, kad kodas atrodytų geriau ir lengviau išlaikomas, kai reikia paskambinti asinchroninei funkcijai po kitos asinchroninės funkcijos