⊗jsSpExcPrb 150 of 294 menu

Preposielanie výnimiek v JavaScripte

Pozrime sa na blok catch úlohy s JSON produktu:

catch (error) { if (error.name == 'SyntaxError') { alert('Nekorektný JSON produktu'); } else if (error.name == 'ProductCostError') { alert('Produkt nemá cenu alebo množstvo'); } }

Ako vidíte, chytáme dve plánované výnimky a nejako na ne reagujeme. Ale čo sa stane, ak nastane neplánovaná výnimka iného typu? V tomto prípade tiež padne do bloku catch, ale žiadna reakcia na ňu nenastane, pretože výnimka s iným typom jednoducho nespadne do žiadneho z našich podmienených blokov.

Keď hovorím, že nebude žiadna reakcia, myslím tým, že skutočne žiadna: dokonca nebude žiadny výpis chyby do konzoly. Náš kód bude jednoducho mlčať a nefungovať.

Preto existuje nasledujúce pravidlo: váš kód by mal chytiť len tie výnimky, s ktorými vie, ako si poradiť. Ak je výnimka neznáma, treba ju preposlať ďalej pomocou throw. V tomto prípade ju vyššie chytí niekto lepšie informovaný alebo výnimka vypíše chybu do konzoly.

Opravme náš kód:

catch (error) { if (error.name == 'SyntaxError') { alert('Nekorektný JSON produktu'); } else if (error.name == 'ProductCostError') { alert('Produkt nemá cenu alebo množstvo'); } else { throw error; // preposielame výnimku ďalej } }

Daný je nasledujúci kód:

try { let arr = JSON.parse(json); for (let i = 0; i < arr.length; i++) { localStorage.setItem(i, arr[i]); } } catch (error) { if (error.name == 'QuotaExceededError') { alert('došlo miesto v úložisku'); } if (error.name == 'SyntaxError') { alert('nekorektný JSON'); } }

Čo je zlé na tomto kóde? Opravte ho na vhodnejší.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť