Tagasihelistamise VS lubab VS Async / Oota

Sirvides sellel nädalal välja kuulutatud esinejaid BerlinJS-i kokkutulekul, märkasin, et Mohamed Oun annab oma esimese kõne (muuseas õnne) JS-i maailma viimases suures hitis Asyncis ja ootame. Nii et mõtlesin, et võiksin teha ka oma kokkuvõtte, et saaksin märkmeid võrrelda;)

Nüüd ma ei kavatse mingil juhul selle blogiga uuele pinnale asuda, kuid vähemalt minu jaoks polnud kogu sellel lubadusel ja asünkil / oodake asja mõte enne, kui ma seda tegelikult kasutasin. Ja seda me ka teeme.

Muudest keeltest tulijatele on hüvede lubadused ja async + ootamine puhas ja loetav viis funktsioonide aheldamiseks ning usaldusväärse ja lühikese voolu juhtimise rakendamiseks. Ei midagi enamat, mitte midagi vähemat.

Ükskõik, kas jalgsi, jalgrattaga või bussiga, saate ikkagi sinna, kuhu soovite minna. Sama funktsiooni tagasikutsumise korral VS lubadustega.

Teeme seda → Seadistamine

Kujutame ette, et meil on rakendus node.js, mis suudab vormist andmeid postitada kontrollerisse, mida mongoose (sealhulgas natuke vahetarkvara) kaudu meie DB-sse salvestatakse.

See stsenaarium pakub meile paar võimalust, neist kolm:

Tagasihelistamine

Selle TLDR tähendab põhimõtteliselt seda, et kui teil on meie kontrolleri sees mitu funktsiooni, mida tuleb täita, siis ei oota JS asünkliku olemuse tõttu funktsiooni täitmist enne järgmisele liikumist. Nagu allpool näete, hakkasid inimesed selle tagasikutsumise abil kasutama tagasihelistamist.

Me kutsume funktsiooniA ja kõigi järgnevate funktsioonide täitmine sõltub funktsiooniA tagastamisest.

Nüüd hakkab selle probleem ilmnema, kui meil on keerukamad funktsioonid. Võib-olla peate oma andmeid puhastama või valideerima või looma seoseid muude DB kirjetega. Saate kiiresti kohale ja jõuate kohale, mida paljud nimetavad tagasihelistamise põrguks.

Hakkame tagasihelistama ja asjad muutuvad kiiresti raskesti loetavaks.

Lubadused

Lubadus on objekt, mis tähistab asünkroonse toimingu võimalikku lõpetamist või ebaõnnestumist.

Saame vältida seda pesastunud, raskesti loetavat jama ja saavutada sama eesmärk, kasutades midagi sellist.

Ütleme nii, et tahame enne salvestamist leida veel ühe plaadi ja asutada ühenduse, teame, mis see väljakutsete maailmas võiks välja näha, kuid lubadustega jõuame lõpuks mõneti sarnase ahelani:

Lubadused võimaldavad meil järgmisi toiminguid aheldada puhtalt, vältides tagasihelistamise põrgust ja kui te alati tagastate lubaduse iga oma tollase ploki eest, jätkub see ahelas.

Async / Oota

Nüüd on siin lahe asi, kui mu funktsioon on asünkriks kuulutatud, lisades kõnele lihtsalt ooteaja, täpselt sama, mis ükski ülaltoodud es6 lubaduspõhistest lahendustest, kuid veelgi puhtama märgistusega.

See on elegantne ja lihtne, kuid minu arvates on ainus kompromiss vigade käsitlemine. Regulaarsed lubadused pakuvad meile kena ja hõlpsa püügibloki, mis lihtsustab erandite ja vigade käsitlemist, samal ajal kui asünkri funktsioonidel pole minu teada tõepoolest kena viis vigu püüda. Nii et peate midagi sellist tegema.

Nüüd pole see päris ilus, kuid oma väikese näite huvides andke mulle palun. Ja muidugi on palju nippe ja strateegiaid selle käsitlemiseks reaalses maailmas.

Ja seal see teil on

Taotlused lubaduste ja asünkide kohta / ootavad igapäevast kasutamist, millega peaaegu iga sealne arendaja on tuttav. Täname, et leidsite aega selle lugemiseks.

Kas märkasite viga? Kas ma räägin jama?

Andke mulle teada, kui arvate, et mul on kepp vales otsas! Olen inimene, teen vigu, õpin neist hea meelega :)

Allikad:

Vaatan praegu Wes Bossi vestlust Asynci + ootamas ja ma ei saa seda piisavalt soovitada, kui soovite rohkem teada saada (ta kirjeldab vigade käsitlemist nii detailsemalt, tõsiselt, et see on tore). Tegelikult soovitan ma teda lihtsalt üldiselt jälgida (ma olen tohutu fänn Wes Bos!).

MDN veebidokumendid lubaduste kasutamise kohta

MDB veebidokumendid asynci + kohta ootavad