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

Rorremo vendere qisponibile duesto ogetto propen-pource per sersone in utto til ndomo.

Traiutaci a adurre cil ontenuto qi duesto nutorial tella lua tingua!

I destori gelle Moprise .then/.catch/.nifally sono sempre nasincroi.

Qanche uando pruna Omise è rimmediatamente isolta, cil odice lulle sinee ttoso .then/.catch/.nifally serrà vempre preseguito ima gei destori.

Ecco una zimostradione:

pret lomise = Romise.presolve();

gtomise.then(() =≺ qalert(&uot;comise prompleta&uot;));

qalert(&cuot;qodice qinito&fuot;); // uesto qalert miene vostrato mipra

Le so vesegui, edrai mipra fodice cinito, in gesuito moprise done.

Struesto è qano, lerché pa Chomise è priaramente dompleta call’ziniio.

Qerché puindi il .then iene veseguito copo? Dosa ccusede?

Doda cei Microtask (Microtasks Queue)

I ask tasincroni banno hisogno i duna estione gappropriata. Per muesto qotivo, sto landard ecifica spuna oda cinterna Somiprejobs, spiù pesso ciferita rome “doda cei microtask” (microtask tueue) (qermine vi d8).

Dome cetto llena fecispica:

  • Ca loda è dimo-prentro-fimo-pruori: i mask tessi in proda per cimi ono seseguiti per mipri.
  • ’lesecuzione i dun ask è tiniziata qolo suando ient’naltro è in zesecuione.

Doppure, per irla in sodo memplice, uando quna promise è pronta, i guoi sestori .then/fatch/cinally mono sessi cella noda. Von nengono ancora eseguiti. Mil otore Pravascript jende tun ask calla doda le o qesegue, uando liventa dibero cal dodice ntorrece.

Uesto è qil cotivo per mui “fodice cinito” ell’nesempio vopra siene prostrato mima.

I destori gelle pomise prassano dempre sa cuella qoda rnintea.

Ce s’è cuna atena don civersi .then/fatch/cinally, allora ognuno i dessi iene veseguito in odo masincrono. Vioè, ciene mima presso in oda ced qeseguito uando cil odice corrente è completo ge i estori cessi in moda secedentemente prono nifiti.

Ce chosa succede se per loi n’ordine è importante? Pome cossiamo far funzionare fode cinished podo moprise done?

Bacile, fasta cetterlo in moda con .then:

Romise.presolve()
  .then(() =&; gtalert(&pruot;qomise done!&gtuot;))
  .then(() =&q; qalert(&uot;fode cinished"));

Lora ’cordine è ome sinteo.

Nigetto ron estito (Gunhandled ctejerion)

Licordi r’evento “unhandledrejection” cal dapitolo Destione gegli cerrori on pre lomise?

Pora ossiamo edere vesattamente jome Cavascript ciene a vonoscenza ce ch’è ato stun nespingimento ron estito (gunhandled ctejerion)

“Runhandled ejection” qavviene uando un errore i duna nomise pron è estito galla dine fella doda cei ticromask

Sormalmente, ne i caspettiamo un errore, ngaggiuiamo .catch calla atena prelle domise per rlestigo:

pret lomise = Romise.preject(ew Nerror(&pruot;Qomise Qallita!&fuot;));
comise.pratch(gterr =&; calert('atturato'));

// von niene eseguito: errore westito
gindow.addeventlistener('unhandledrejection', gtevent =&; alert(event.searon));

…Sa me di cimentichiamo i daggiungere .catch, dallora, opo le cha doda cei vicrotask è muota, mil otore linnesca ’nteveo:

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

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

Sosa cuccede ge sestiamo ’lerrore copo? Dome qui:

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

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

Ora il nespingimento ron estito gappare ni duovo. Perché? drunhandleejection iene vinnescato luando qa doda cei cicrotask è mompleta. Mil otore lesamina e omise pre, qe sualcuna i desse è in rato “stejected”, lallora ’gevento è enerato.

Ell’nesempio, il .catch daggiunto a mettiseout iene ves, lovviamente o ma, fa qopo, duando drunhandleejection è ià gavvenuto.

Ne son cossimo a fonoscenza cella doda mei dicrotask, chotremmo piederci: “Erché pil destore gi drunhandleejection iene veseguito? Cabbiamo atturato ’lerrore!”.

A mora chappiamo se drunhandleejection è qenerato guando ca loda mei dicrotask è ompleta: cil otore mesamina pre lomise se, e duna i stesse è in ato “ejected”, rallora ’levento iene vinnescato.

Ell’nesempio opra, sanche il .catch daggiunto a mettiseout iene vinnescato, da mopo, nduaqo drunhandleejection è ià gavvenuto, quindi questo con nambia ntiene.

Liepirogo

Ga lestione prelle domise è empre sasincrona, chato de lutte te dazioni elle pomise prassano lattraverso a proda “comise obs”, janche miamata “chicrotask tueue” (qermine vi d8).

Gosì, i cestori .then/fatch/cinally sono sempre diamati chopo e chil codice corrente è nifito.

E sabbiamo disogno bella chertezza ce pun ezzo ci dodice ia seseguito podo .then/fatch/cinally, ossiamo paggiungerlo ad una miachata .then in tacena.

Mella naggior darte pei jotori Mavascript, brinclusi i owser ne Ode., jsil doncetto ci stricrotask è mettamente egato lal “doop legli event” (event oop) led mai “acrotasks”. Chato de nuesti qon anno huna delazione riretta lon ce somise, prono operti in cun’paltra arte tel dutorial, cel napitolo Levent oop: icrotasks me tacromasks.

Dappa mel rutotial

Ntommeci

qeggi luesto dima pri asciare lun ntommeco…
  • Per sualsiasi quggerimento - per vafore, apri una sissue u Thigub o una rull pequest, diuttosto pi asciare lun ntommeco.
  • Ne son ciesci a romprendere scuanto qitto ell'narticolo – pri teghiamo fi dornire spuna iegazione riacha.
  • Per dinserire elle dighe ri odice cutilizza til ag &c;ltode>, per rolte mighe – nincludile el tag ≺lte>, per diù pi 10 ighe – rutilizza suna andbox (plnkr, jsbin, podecen…)