Svarhring VS lofar VS Async / Bíðið

Þegar ég fletti í gegnum tilkynnta ræðumenn þessa vikuna í BerlinJS-fundinum, tók ég eftir því að Mohamed Oun flytur fyrsta ræðu sína (gangi þér vel) um JS heimsins nýjasta stórsigur, Async og bíður. Svo ég hélt að ég gæti alveg eins gert mitt eigið samantekt svo ég geti borið saman glósur;)

Núna ætla ég engan veginn að troða nýjum vettvangi með þessu bloggi en að minnsta kosti fyrir mig þetta allt loforð & ósamstillt / bíða hlutur var ekki skynsamlegt fyrr en ég notaði það í raun. Og það er það sem við munum gera.

Fyrir þá sem koma frá öðrum tungumálum eru ávinning loforða og ósamstillingar + bíða hreinn og læsileg leið til að keðja aðgerðir og innleiða áreiðanlega og hnitmiðaða flæðastýringu. Ekkert meira, ekkert minna.

Hvort sem þú tekur göngutúr, hjólar eða tekur strætó geturðu samt komið þangað sem þú vilt fara. Sama fyrir svarhringingu aðgerða VS lofar.

Við skulum gera þetta → Uppsetningin

Við skulum ímynda okkur að við höfum fengið node.js forrit, sem er fær um að senda gögn frá eyðublaði, til stjórnanda, sem með mongoose (þar á meðal smá miðbúnaðar) er að geyma í DB okkar.

Þessi atburðarás gefur okkur nokkra möguleika, vel þrjá:

Svarhringingar

TLDR þessa er í grundvallaratriðum að ef þú ert með margfalda aðgerðir sem þarf að framkvæma innan stjórnandans okkar, JS, vegna þess að það er ósamræmi, þá muntu ekki bíða eftir að falli til að ljúka framkvæmdinni áður en þú ferð yfir í það næsta. Hvernig fólk byrjaði að komast í kringum þetta er með því að nota svarhringingu eins og þú sérð hér að neðan.

Við köllum functionA, og framkvæmd allra síðari aðgerða treystir á endurkomu functionA.

Nú byrjar vandamálið við þetta að birtast þegar við erum með flóknari aðgerðir. Kannski þarftu að hreinsa gögnin þín, keyra raunfærnimat eða byggja upp samtök við aðrar skrár í DB. Þú kemur fljótt og kemur að því sem margir vísa til sem helvítis svarhring.

Við byrjum að verpa afturköllun og það verður fljótt erfitt að lesa það.

Lofar

Loforð er hlutur sem táknar að lokum eða bilun á ósamstilltur aðgerð.

Við getum forðast það hreiður, erfitt að lesa sóðaskap og ná sama markmiði með því að nota eitthvað slíkt.

Segjum að við viljum finna aðra skrá og byggja upp samtök áður en við sparar, við vitum hvernig það gæti litið út í heimi svarhringinga, en með loforðum endum við með keðju sem er nokkuð svipuð þessari:

Loforð leyfa okkur að hreinsa keðju keðjunnar í kjölfarið og forðast helvítis svarhring og svo framarlega sem þú skilar alltaf loforði fyrir hverja þá kubb sem er þá mun það halda áfram niður keðjuna.

Async / Bíða

Nú er svalið hérna svo framarlega sem hlutverk mitt er lýst sem ósamstilltur, einfaldlega að bíða eftir símtali, mun gera nákvæmlega það sama og einhver af ofangreindum es6 loforðum byggðum lausnum, en með jafnvel hreinni álagningu.

Það er glæsilegt og einfalt, en eina skiptinemin að mínu mati er hvernig á að höndla villur. Regluleg loforð veita okkur fallegan og auðveldan aflablokk sem auðveldar að takast á við undantekningar og villur, á meðan ósamstilltar aðgerðir hafa í raun ekki fallega leið til að ná villum að mínu viti. Svo þú þarft að gera eitthvað svona.

Nú er það ekki fallegt, en fyrir sakir litlu dæmisins skaltu láta undan mér. Og auðvitað eru fullt af brellum og aðferðum til að takast á við þetta í hinum raunverulega heimi.

Og þar hefurðu það

Notkun loforða og ósamstilltur / bíða í daglegu daglegu máli sem næstum allir verktaki þarna úti þekkja. Takk fyrir að gefa þér tíma til að lesa það.

Komstu auga á villu? Er ég að tala bull?

Láttu mig vita ef þú heldur að ég hafi haft rangan enda stafsins! Ég er mannlegur, ég geri mistök, ég er ánægð að læra af þeim :)

Heimildir:

Ég er að fara að horfa á ræðu Wes Bos um Async + Await og ég get ekki mælt með því nógu mikið ef þú vilt vita meira (hann lýsir villuhöndlun svo miklu nánar, alvarlega er það frábært). Reyndar myndi ég mæla með því að fylgja honum almennt (ég er mikill aðdáandi Wes Bos!).

MDN vefgögn um notkun loforða

MDB vefgögn á async + bíða