Kļūdu mēšana JavaScript
Apskatīsim <catch bloku JSON produkta uzdevumā:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Nekorekts JSON produkts');
} else if (error.name == 'ProductCostError') {
alert('Produktam trūkst cena vai daudzums');
}
}
Kā redzat, mēs noķeram divus mūsu plānotos
izņēmumus un uz to kaut kā reaģējam.
Bet kas notiks, ja rasties mūsu neparedzēts
izņēmums ar citu tipu? Šajā gadījumā
tas arī nonāks <catch blokā, bet
nekāda reakcija uz to nesekos, jo
izņēmums ar citu tipu vienkārši neiekritīs
nevienā no mūsu if pārbaudēm.
Kad es saku, ka nebūs nekādas reakcijas, tad es domāju, ka īsti nekādas: pat nebūs kļūdas izvadīšanas konsolē. Mūsu kods vienkārši klusējot nedarbosies.
Tāpēc pastāv šāds noteikums: jūsu
kodam jānoķer tikai tie izņēmumi, ar
kuriem tas zina, kā tikt galā. Ja izņēmums
nav zināms, tad to ir jāmet
tālāk, izmantojot <throw. Šajā gadījumā
augstāk to noķers kāds vairāk zinošs
vai arī izņēmums tiks izvadīts kā kļūda konsolē.
Izlabosim mūsu kodu:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Nekorekts JSON produkts');
} else if (error.name == 'ProductCostError') {
alert('Produktam trūkst cena vai daudzums');
} else {
throw error; // mētam izņēmumu tālāk
}
}
Dots šāds kods:
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('beidzās vieta krātuvē');
}
if (error.name == 'SyntaxError') {
alert('nekorekts JSON');
}
}
Kas ir nepareizs ar šo kodu? Izlabojiet to uz veiksmīgāku.