⊗jsSpExcPrb 150 of 294 menu

Kivételek továbbdobása JavaScriptben

Vizsgáljuk meg a JSON termék feladat catch blokkját:

catch (error) { if (error.name == 'SyntaxError') { alert('Hibás JSON termék'); } else if (error.name == 'ProductCostError') { alert('A terméknek nincs ára vagy mennyisége'); } }

Amint látható, elkapunk két általunk tervezett kivételt és valahogy reagálunk rájuk. De mi történik, ha egy általunk nem előzhető, más típusú kivétel merül fel? Ebben az esetben az is belép a catch blokkba, de erre nem következik be semmilyen reakció, mivel a más típusú kivétel egyszerűen nem kerül be egyik if águnkba sem.

Amikor azt mondom, hogy nem lesz semmilyen reakció, akkor azt értem, hogy tényleg semmi: még hiba sem jelenik meg a konzolon. A kódunk egyszerűen csendesen nem fog működni.

Ezért létezik a következő szabály: a kódodnak csak azokat a kivételeket kapja el, amelyekkel tudja, hogyan bánjon. Ha a kivétel ismeretlen, akkor azt tovább kell dobni a throw segítségével. Ebben az esetben feljebb valaki jobban informált elkapja, vagy a kivétel hibaként megjelenik a konzolon.

Javítsuk a kódunkat:

catch (error) { if (error.name == 'SyntaxError') { alert('Hibás JSON termék'); } else if (error.name == 'ProductCostError') { alert('A terméknek nincs ára vagy mennyisége'); } else { throw error; // továbbdobjuk a kivételt } }

Adott a következő 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('elfogyott a hely a tárolóban'); } if (error.name == 'SyntaxError') { alert('hibás JSON'); } }

Mi a baj ezzel a kóddal? Javítsa ki egy megfelelőbb verzióra.

nlmsroenes