Soittopyynnöt VS lupaa VS Asyncin / Odota

Vierittäessään tällä viikolla ilmoitettuja kaiuttimia BerlinJS-tapaamisella huomasin, että Mohamed Oun kertoo ensimmäisen puheensa (onnea muuten) JS-maailman viimeisimmän hittinsa Asyncin kanssa ja odottaa. Joten ajattelin, että voisin tehdä oman yhteenvedon, jotta voin verrata muistiinpanoja;)

Nyt ei missään nimessä aio ajaa uutta perustaa tähän blogiin, mutta ainakin minulle koko lupauksen ja asynkin / odota asia ei ollut järkevää, ennen kuin olen todella käyttänyt sitä. Ja mitä me teemme.

Muilta kieliltä tuleville hyötylupaukset ja async + odottavat tarjoamista on puhdas ja luettavissa oleva tapa ketjua toimintoja ja toteuttaa luotettava ja tiivis virtauksen hallinta. Ei enempää eikä vähempää.

Kävelet sitten kävelyllä, pyöräillä tai bussilla, voit silti päästä minne haluat mennä. Sama toimintojen takaisinsoittoihin VS-lupaukset.

Tehdään tämä → Asennus

Kuvittelemme, että meillä on node.js-sovellus, joka pystyy lähettämään tietoja lomakkeesta ohjaimeen, jota mongoose (myös vähän väliohjelmistoa) tallentaa tietokantaan.

Tämä skenaario antaa meille pari vaihtoehtoa, hyvin kolme:

kutsuvastauksia

Tämän TLDR on periaatteessa se, että jos sinulla on useita toimintoja, jotka on suoritettava ohjaimessa, JS ei asynkkuuden luonteen vuoksi odota toiminnon suorittamista loppuun ennen siirtymistä seuraavaan. Kuten alla näet, ihmiset aloittivat tämän kiertämisen käyttämällä soittopyyntöjä.

Kutsumme funktiotaA, ja kaikkien seuraavien toimintojen suorittaminen riippuu funktionA palautuksesta.

Nyt tämän ongelma alkaa ilmestyä, kun meillä on monimutkaisempia toimintoja. Sinun on ehkä puhdistettava tietosi tai suoritettava validointeja tai rakennettava assosiaatioita muihin DB-tietueisiin. Tulet nopeasti saapumaan siihen, mitä monet viittaavat takaisinsoittohelmaan.

Alamme pitää pesätä soittopyyntöjä ja asioista tulee nopeasti vaikeita lukea.

lupauksia

Lupaus on objekti, joka edustaa asynkronisen toiminnan mahdollista toteutumista tai epäonnistumista.

Voimme välttää sisäkkäisen, vaikeasti luettavan sotkun ja saavuttaa saman tavoitteen käyttämällä jotain tällaista.

Oletetaan, että haluamme löytää uuden levyn ja rakentaa yhdistyksen ennen tallentamista. Tiedämme miltä se voi näyttää takaisinsoittojen maailmassa, mutta lupausten takia päädymme ketjuun, joka on jonkin verran samanlainen kuin seuraava:

Lupausten avulla voimme ketjuttaa ketjun myöhemmät toimenpiteet puhtaasti välttäen soittopolvia ja niin kauan kuin palautat lupauksen jokaiselle silloiselle lohkollesi, se jatkaa ketjussa.

Async / odottavat

Nyt hieno asia täällä, kunhan toimintoni julistetaan asynkiksi, lisäämällä vain odottaa puheluun, aivan sama asia kuin mikä tahansa yllä olevista es6-lupauspohjaisista ratkaisuista, mutta vielä puhtaammalla merkinnällä.

Se on tyylikäs ja yksinkertainen, mutta mielestäni ainoa kompromissi on virheiden käsittely. Säännölliset lupaukset tarjoavat meille mukavan ja helpon saalislohkon, joka yksinkertaistaa poikkeusten ja virheiden käsittelyä, kun taas async-toiminnoilla ei todellakaan ole mukavaa tapaa korjata virheitä tietoni mukaan. Joten sinun on tehtävä jotain tällaista.

Nyt se ei ole kauniita, mutta pikku esimerkini vuoksi ole hyvä ja anna minulle. Ja tietysti on paljon temppuja ja strategioita käsitelläksesi tätä todellisessa maailmassa.

Ja siinä se on

Sovellus lupauksille ja asynkkeille / odottaa päivittäisessä käytössä tapausta, johon melkein kaikki siellä olevat kehittäjät ovat perehtyneet. Kiitos, että luit aikaa.

Huomasitko virheen? Puhunko hölynpölyä?

Kerro minulle, jos luulet minulla olevan väärän pään pää! Olen ihminen, teen virheitä, olen iloinen voidessani oppia niistä :)

Lähteet:

Katson parhaillaan Wes Bosin keskustelua Async + Await -ohjelmasta, enkä voi suositella sitä tarpeeksi, jos haluat tietää enemmän (hän ​​kuvaa virheiden käsittelyä niin yksityiskohtaisemmin, tosissaan se on hienoa). Oikeastaan ​​suosittelen seuraamaan häntä yleensä (olen suuri fani Wes Bos!).

MDN: n web-asiakirjat lupausten käytöstä

MDB: n web-asiakirjat async +: lla odottavat