Erindite edasisaatmise JavaScriptis
Vaatleme JSON toote ülesande catch plokki:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Vigane toote JSON');
} else if (error.name == 'ProductCostError') {
alert('Tootel puudub hind või kogus');
}
}
Nagu näete, püüame kaks plaanitud
erindit ja reageerime sellele kuidagi.
Aga mis juhtub, kui tekib ettenägematut
tüüpi erind? Sel juhul
see satub ka catch plokki, kuid
mingit reaktsiooni sellele ei järgne, sest
erind teist tüüpi lihtsalt ei jõua
ühtegi meie if-lausesse.
Kui ma ütlen, et mingit reaktsiooni ei ole, siis ma mõtlen, et tegelikult mitte mingit: isegi ei ilmu viga konsooli. Meie kood lihtsalt töötab vaikselt edasi.
Seetõttu kehtib järgmine reegel: teie
kood peaks püüdma ainult neid erindeid, millega
teab, kuidas toime tulla. Kui erind
on teadmata, siis tuleb seda edasi saata
kasutades throw. Sel juhul
püüab selle kõrgemal keegi teadlikum
või erind ilmuve veana konsooli.
Parandame oma koodi:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Vigane toote JSON');
} else if (error.name == 'ProductCostError') {
alert('Tootel puudub hind või kogus');
} else {
throw error; // saadame erindi edasi
}
}
Antud on järgmine kood:
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('salvestusruum on otsas');
}
if (error.name == 'SyntaxError') {
alert('vigane JSON');
}
}
Mis selle koodiga on valesti? Parandage see õnnestunumaks.