/ / es6 sľubuje chyby typu lastovičky - javascript, es6-sľub

es6 sľubuje chyby typu lastovičky - javascript, es6-sľub

Chcem, aby prehliadač zobrazil chybové hlásenie, keď sa vyskytne chyba typu.
chyby ako nemôže čítať vlastníctvo niečo nedefinované alebo nedefinovaný odkaz.

new Promise(function(resolve,reject){
// do stuff ...
reject("something logical is wrong");
}).catch(e => console.error(e));

new Promise(function(resolve,reject){
// do stuff, and a syntax error :/
var a = { };
a.something.otherthing = 1; /* we have an error here */
// ...
}).catch(e => console.error(e));

V prvom príklade je chyba logická a jej chyba je chytiť v chytiť (..) blok.
Ale v druhom príklade je to jasnéchyba pri vývoji, ktorá sa vyskytuje neustále pri vývoji nových vecí. Nechcem to chytiť, chcem, aby mi prehliadač ukázal chybu ako iné chyby v konzole. Chcem sa dať zapnúť chrome pauza na výnimky a pozrite si stav ďalších premenných. Chcem vidieť stopu zásobníka v konzole.
Chcem, aby to fungovalo ako normálne chyba.

Nejaký nápad?

odpovede:

5 pre odpoveď č. 1

Na rozdiel od výnimiek v synchrónnom kóde, ktoré sa stávajú uncaught akonáhle sa kód vráti na nečinný, prehliadač zvyčajne nepozná logický koniec sľubnej reťaze, ktorá je tam, kde je asynchrónna chyba možno považovať za bezpredmetné. Reťaze sa napokon zostavujú dynamicky, a preto je lepšie ich ukončiť finálnym .catch na logickom konci reťazca, t. j. asynchrónny ekvivalent nečinnosti.

Po finále .catch(e => console.error(e)) sa mi zdá veľmi rozumný, ale máte pravdu, že prehliadače majú tendenciu tieto chyby zobrazovať odlišne od neúspešných výnimiek. Ak chcete, aby sa zobrazovali rovnaké, môžete použiť tento trik:

.catch(e => setTimeout(() => { throw e; }))

To bude hodiť e, ktorý obsahuje pôvodné číslo stopy a číslo riadku, hneď v nasledujúcom cykle a mimo sľubnej reťaze, kde ho nič nezachytí a bude hlásené ako nevhodné. Používame setTimeout prekonať predvolené správanie servera .catch čo je zachytiť všetky výnimky v reťazci pre prípad, že máte v úmysle pokračovať v reťazení.

Dúfam, že s týmto uvidíte, že akékoľvek rozlišovanie medzi „logickými“ a inými chybami je irelevantné. Akákoľvek chyba, ktorá sa dostane na chvost reťaze, bola pre reťaz fatálna, t.j. uncaught (aj keď v konečnom úlovku samozrejme môžete z ostatných chýb triediť „logické“ a zobraziť ich inak, ak sa rozhodnete.)


2 pre odpoveď č. 2

chróm má možnosť Pauza pre odchytené výnimky v zdroje karta, povolil som túto možnosť a Pozastaviť pri výnimkách funkcia teraz funguje dobre.