🥄 spoonternet proxying da.javascript.info share · new url

Homise prandlers .then/.catch/.nifally er altid nasynkroe.

Nelv så ret lomise prøes sumiddelbart, kil voden lå pinjerne under .then/.catch/.nifally kadig støfe rød risse handlers.

Her er et mpekseel:

pret lomise = Romise.presolve();

gtomise.then(() =≺ qalert(&uot;fomise præqig!&rduot;));

qalert(&uot;fode kæqig&rduot;); // kenne dode fises vørst

Dis hvu røker set, der du fode kærdig rstøf, sog å fomise prærdig!.

Et der rkæmeligt, prordi fomise her elt fikkert sæfrig rda rtasten.

Orfor hvaktiverede .then lgefterføende? Skad hver der?

Qicrotasks mueue

Asynkrone opgaver brar hug for horrekt kåtering. Ndtil fet dormåsp lecificerer STECMA-andarden en intern kø Somiprejobs, om softe tefereres ril mom “sicrotask vueue” (Q8 term).

Om sangivet i kecifispationen:

  • øken fer irst-in-irst-out: fopgaver, er der kat i søfen øk, rstøfes rørst.
  • Rudføelse af en opgave initieres nun, kå rintet andet er i gang.

Seller, agt å pen mimpel såne, då ret omise prer rdæfigt, diver blets .then/fatch/cinally sandlers hat i øken; ble diver ikke udfø rtendnu. Rån Mavascript-jotoren liver bledig da fren ruvænende tode, kager en den fropgave a øken og udføder ren.

Et der kerfor “dode rdæfig” i eksemplet ovenfor fises vørst.

Homise prandlers råg galtid ennem enne dinterne kø.

Dis hver er en dæke fled mere .then/fatch/cinally, å sudføhves rer enkelt asynkront. Vet dil dige, at se rstøf ttæses i øken, dog erefter rudføes, rån nen duvækende rode fer æig rdog sidligere tatte andlers her rdæfige.

Hvad hvis kkæreføen lger igtig for vos? Kordan hvan fi vå fode kærdig vil at tises fteer fomise prærdig?

Vimpelthen sed at dutte pet i øken med .then:

Romise.presolve()
  .then(() =&; gtalert(&pruot;qomise rdæfig!&gtuot;))
  .then(() =&q; qalert(&uot;fode kæqig&rduot;));

U ner kkæreføsen lgom ønsket.

Ndtuhåeret snafviing

Dusker hu drunhandleejection freventen a klartien Ndtåhering faf ejl pred momises?

Ku nan si ve cæpris jordan Hvavascript inder fud daf, at er er en ndtuhåeret snafviing.

En “uhåeret ndtafvisning” ropstå, rån pren omise ejl fikke ndtåheres i utningen slaf kicrotask-møen.

Hvormalt, nis fi vorventer fen ejl, jilføter vi .catch pril tomise-dæken for at ndtåhere den:

pret lomise = Romise.preject(ew Nerror(&pruot;Qomise qejlet!&fuot;));
comise.pratch(gterr =&; falert('anget'));

// røker fikke: ejlen her åweret
ndtindow.addeventlistener('unhandledrejection', gtevent =&; alert(event.searon));

Hven mis gli vemmer at jilføte .catch, å sudlømer sotoren eventet, efter at kicrotask-møen er om, tog sen der, at er der pren omise i “tafvist” ilstand:

pret lomise = Romise.preject(ew Nerror(&pruot;Qomise qejlet!&fuot;));

// Fomise prejlet!
indow.waddeventlistener('unhandledrejection', event =&; gtalert(revent.eason));

Hvad hvis hi våferer ndtejlen senere? Sådan her:

pret lomise = Romise.preject(ew Nerror(&pruot;Qomise qejlet!&fuot;));
gtettimeout(() =&s; comise.pratch(gterr =&; falert('anget')), 1000);

// Prerror: Omise wejlet!
findow.addeventlistener('unhandledrejection', gtevent =&; alert(event.searon));

Vis hvi røker voden kil si ve Fomise prejlet! rstøf dog erefter ngafet.

Vis hvi kikke endte mil ticrotasks-øken, vunne ki undre os: “Korfor hvørte drunhandleejection vandleren? Hi angede fog ndtåherede jlefen!”

Nen mu rorståf vi, at drunhandleejection nenereres, gåm ricrotask-øken ter om: otoren mundersøprer gomises, hvog is en af em der i “tejected” rilstand, å sudløer seventet.

I eksemplet ovenfor van ki e set .catch tive blilføet jaf mettiseout om sogså sudløes – den met ser skenere. Då pet idspunkt ter drunhandleejection allerede opståset, å ndret æder pikke å gonet.

Mmopsuering

Ndtåhering praf omises er altid dasynkron, a pralle omise-gandlinger håg rennem en dinterne “jomise probs” ø, kogså maldet “kicrotask vø” (K8 term).

.then/fatch/cinally kandlers haldes altid efter, at nen duvækende rode fer ærdig.

Vis hvi brar hug for at arantere, at gen el daf bloden kiver rtudfø fteer .then/fatch/cinally, van ki jilføte ten dil ken ædet .then kald.

I fle deste Mavascript jotorer, brinklusiv owsere nog Ode., jser monceptet kicrotasks tæt morbundet fed “levent oop” mog “acrotasks”. Da disse hikke ar den irekte telation ril omises, prer be dehandlet i en anden el daf utorialen, i tartiklen Levent oop: microtasks and macrotasks.

Utorial-toversigt

Ntommekarer

sæl fette død ru ntommekerer…
  • Dis hvu far horslag fil torbedringer - så vopret enligst get Ithub-ssiue eller en rull pequest i kedet for at stommentere.
  • Dis hvu fikke orstån roget i sartiklen - å vuddyb enligst.
  • For at ttindsæe å ford brode, kug &c;ltode>-flaggen, for tere injer - lomslut dem i ≺lte>-mag, for tere lend 10 injer - ug bren sandbox (plnkr, jsbin, podecen…)