Node.js Promise -opastus

Sisällysluettelo:

Anonim

Aikaisemmissa opetusohjelmissa olisit nähnyt soittopyynnöt, joita käytetään asynkronisissa tapahtumissa. Mutta joskus soittopyynnöistä voi tulla painajainen, kun ne alkavat sisäkkäin, ja ohjelmasta alkaa tulla pitkä ja monimutkainen.

Tässä opetusohjelmassa opit-

  • Mitä ovat lupaukset?
  • Takaisinkutsut lupauksiin
  • Sisäkkäisten lupausten käsittely
  • Mukautetun lupauksen luominen

Mitä ovat lupaukset?

Ennen kuin aloitamme lupauksista, tarkastellaan ensin Node.js: n "takaisinsoittotoimintoja". Olemme nähneet näitä takaisinsoittotoimintoja paljon edellisissä luvuissa, joten käydään nopeasti läpi yksi niistä.

Alla olevassa esimerkissä on koodinpätkä, jota käytetään muodostamaan yhteys MongoDB-tietokantaan ja suorittamaan päivitystoiminta jollekin tietokannan tietueista.

  1. Yllä olevassa koodissa funktion osa (err, db) tunnetaan nimettömän tai takaisinsoittofunktion ilmoituksena. Kun MongoClient luo yhteyden MongoDB-tietokantaan, se palaa takaisinsoittotoimintoon, kun yhteys on valmis. Joten tietyssä mielessä yhteysoperaatiot tapahtuvat taustalla, ja kun se on tehty, se kutsuu takaisinsoittotoimintoa. Muista, että tämä on yksi Node.js: n tärkeimmistä kohdista, jotta monet toiminnot voivat tapahtua samanaikaisesti eikä siten estä käyttäjiä suorittamasta toimintoa.

  2. Toinen koodilohko suoritetaan, kun takaisinsoittotoiminto todella kutsutaan. Soittotoiminto päivittää vain yhden tietueen MongoDB-tietokannassamme.

Joten mikä lupaus sitten on? No, lupaus on vain parannus takaisinsoittotoiminnoille Node.js: ssä. Kehityksen elinkaaren aikana voi olla tapauksia, joissa joudut pesimään useita takaisinsoittotoimintoja yhdessä. Tämä voi olla jonkinlainen sotkuinen ja vaikea ylläpitää tietyssä ajankohdassa. Lyhyesti sanottuna lupaus on parannus takaisinsoittoihin, joka pyrkii lievittämään näitä ongelmia.

Lupauksen perussyntaksi on esitetty alla;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • "doSomethingAync" on mikä tahansa soittopyyntö tai asynkroninen toiminto, joka käsittelee jonkinlaista käsittelyä.
  • Tällä kertaa, kun määrität soittopyynnön, palautetaan arvo, jota kutsutaan "lupaukseksi".
  • Kun lupaus palautetaan, sillä voi olla kaksi lähtöä. Tämän määrittelee 'silloin -lauseke'. Kumpikin operaatio voi olla menestys, joka merkitään parametrilla 'onFulfilled'. Tai siinä voi olla virhe, joka on merkitty parametrilla 'onRejected'.

Huomaa: Joten lupauksen keskeinen osa on palautusarvo. Palautusarvoa ei ole käsitelty työskenneltäessä normaalien takaisinsoittojen kanssa Node.js: ssä. Palautusarvon vuoksi meillä on enemmän hallintaa siitä, miten takaisinsoittotoiminto voidaan määrittää.

Seuraavassa aiheessa näemme esimerkin lupauksista ja siitä, miten ne hyötyvät takaisinsoittamisesta.

Takaisinkutsut lupauksiin

Katsotaan nyt esimerkkiä siitä, miten voimme käyttää "lupauksia" Node.js-sovelluksen sisällä. Lupausten käyttämiseksi Node.js-sovelluksessa 'lupa' -moduuli on ensin ladattava ja asennettava.

Sitten muokkaamme koodiamme alla esitetyllä tavalla, joka päivittää Employeen-nimen Employee-kokoelmassa lupausten avulla.

Vaihe 1) Asenna NPM-moduulit

Jos haluat käyttää solmuja Node JS -sovelluksessa, vaaditaan lupamoduuli. Asenna lupamoduuli suorittamalla seuraava komento

Npm asennuslupa

Vaihe 2) Muokkaa koodia sisältämään lupauksia

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

Koodin selitys: -

  1. Ensimmäinen osa on sisällyttää 'lupa' -moduuli, jonka avulla voimme käyttää lupaustoimintoa koodissamme.
  2. Voimme nyt liittää 'sitten' -funktion MongoClient.connect-toimintoomme. Joten mitä tämä tarkoittaa, että kun yhteys tietokantaan on muodostettu, meidän on suoritettava sen jälkeen määritelty koodinpätkä.
  3. Lopuksi määritellään koodinpätkä, joka tekee työn päivittämällä työntekijän EmployeeName nimellä "Martin" nimellä "Mohan".

Huomautus:-

Jos tarkistat nyt MongoDB-tietokannan sisällön, huomaat, että jos EmployeeName-tietue on "Martin", se päivitetään muotoon "Mohan".

Varmistaaksesi, että tiedot on lisätty oikein tietokantaan, sinun on suoritettava seuraavat komennot MongoDB: ssä

  1. Käytä EmployeeDB: tä
  2. db.Employee.find ({EmployeeName: Mohan})

Ensimmäinen lauseke varmistaa, että olet yhteydessä EmployeeDb-tietokantaan. Toinen lausunto etsii tietuetta, jolla on työntekijän nimi "Mohan".

Sisäkkäisten lupausten käsittely

Lupauksia määriteltäessä on huomattava, että "sitten" -menetelmä itsessään palauttaa lupauksen. Joten tietyssä mielessä lupaukset voidaan sisäkkäin tai ketjuun toisiinsa.

Alla olevassa esimerkissä käytämme ketjutusta määrittelemään kaksi takaisinkutsutoimintoa, jotka molemmat lisäävät tietueen MongoDB-tietokantaan.

( Huomaa : Ketjutus on käsite, jota käytetään linkittämään menetelmien suorittaminen toisiinsa. Oletetaan, että sovelluksessasi olisi 2 menetelmää nimeltä "methodA" ja "methodB". Ja logiikka oli sellainen, että "methodB" tulisi kutsua "methodA": n jälkeen. ketjuttaisit suorituksen siten, että 'methodB' kutsutaan suoraan 'methodA': n jälkeen.)

Tässä esimerkissä on tärkeää huomata, että koodista tulee puhtaampi, luettavissa ja ylläpidettävissä sisäkkäisten lupausten avulla.

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

Koodin selitys: -

  1. Määritämme nyt 2 "sitten" lauseketta, jotka toteutetaan yksi toisensa jälkeen. Ensimmäisessä sitten lausekkeessa välitetään 'db' -parametri, joka sisältää tietokantayhteytemme. Sitten käytämme db-yhteyden kokoamisominaisuutta lisätäksesi tietueita Työntekijä-kokoelmaan. 'InsertOne' -menetelmää käytetään lisäämään varsinainen asiakirja työntekijän kokoelmaan.
  2. Käytämme sitten toista ja sitten lauseketta myös toisen tietueen lisäämiseen tietokantaan.

Jos tarkistat nyt MongoDB-tietokannan sisällön, löydät 2 tietuetta lisätty MongoDB-tietokantaan.

Mukautetun lupauksen luominen

Mukautettu lupaus voidaan luoda käyttämällä solmumoduulia nimeltä q. Q-kirjasto on ladattava ja asennettava solmupaketinhallinnalla. Q-kirjaston käytön jälkeen voidaan kutsua menetelmä "denodeify", joka saa minkä tahansa funktion tulemaan funktioksi, joka palauttaa lupauksen.

Alla olevassa esimerkissä luomme yksinkertaisen toiminnon nimeltä "Lisää", joka lisää 2 numeroa. Muunamme tämän funktion funktioksi palauttamaan lupauksen.

Kun se on tehty, käytämme Lisää-toiminnon palauttamaa lupaa näyttääksesi viestin console.logissa.

Seuraamme seuraavia vaiheita luodaksemme mukautetun toiminnon palataksemme takaisin.

Vaihe 1) Asenna NPM-moduulit

Q: n käyttäminen solmun JS-sovelluksessa edellyttää q-moduulia. Asenna q-moduuli suorittamalla seuraava komento

npm asennus q

Vaihe 2) Määritä seuraava koodi, jota käytetään mukautetun lupauksen luomiseen.

Koodin selitys: -

  1. Ensimmäinen bitti on sisällyttää q-kirjasto käyttämällä vaadittavaa avainsanaa. Tämän kirjaston avulla voimme määrittää minkä tahansa toiminnon takaisinsoiton palauttamiseksi.
  2. Olemme luomassa funktion nimeltä Lisää, joka lisää 2 muuttujiin a ja b määritettyä lukua. Näiden arvojen summa tallennetaan muuttujaan c.
  3. Sitten käytämme q-kirjastoa koodaamaan (menetelmä, jota käytetään minkä tahansa funktion muuntamiseen funktioksi, joka palauttaisi lupauksen) Add-funktiollemme tai muunnettaessa Add-funktion funktioksi, joka palauttaa lupauksen.
  4. Kutsumme nyt "Add" -funktiomme ja pystymme saamaan palautuslupa-arvon edellisen vaiheen takia, jonka teimme denodefioimalla Add-funktion.
  5. 'Sitten' -hakusanalla määritetään, että jos toiminto suoritetaan onnistuneesti, näytä merkkijono "Lisätoiminto suoritettu" konsolissa.log.

Kun yllä oleva koodi suoritetaan, ulostulo "Lisäystoiminto suoritettu" näkyy konsolissa.log alla olevan kuvan mukaisesti.

Yhteenveto

  • Soittotoimintojen käyttämisellä Node.js: ssä on haittansa. Joskus kehitystyön aikana takaisinsoittotoimintojen sisäkkäinen käyttö voi tehdä koodista keskipitkän ja vaikeasti ylläpidettävän.
  • Suurinta osaa sisäkkäisiin soittopyyntöihin liittyvistä ongelmista voidaan lieventää käyttämällä lupauksia ja generaattoreita node.js-tiedostossa
  • Promise on arvo, jonka asynkroninen toiminto palauttaa osoittamaan asynkronisen toiminnon suorittaman käsittelyn päättymistä.
  • Lupaukset voidaan sijoittaa toisiinsa, jotta koodi näyttää paremmalta ja helpommin ylläpidettävältä, kun asynkroninen toiminto on kutsuttava toisen asynkronisen toiminnon jälkeen