Kupitisha Madai Kutoka Nje katika JavaScript
Tuchunguze kizuizi catch cha kazi na JSON ya bidhaa:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON ya bidhaa si sahihi');
} else if (error.name == 'ProductCostError') {
alert('Bidhaa hana bei au kiasi');
}
}
Kama unavyoona, tunashika madai mawili yaliyopangwa
na sisi na kugibu kwa namna fulani.
Lakini nini kitatokea ikiwa kutakuka dai lisilotarajiwa
na sisi la aina nyingine? Katika hali hii,
litaingia pia kwenye kizuizi catch, lakini
hakutawezekana kugibu kwa sababu
dai lenye aina tofauti halitaingia
katika hata moja ya viwango vyetu.
Ninaposema, hapatakuwa na majibu yoyote, Namaanisha kwamba hakika hakuna: hata hitilafu haitaonekana kwenye koni. Njia yetu itakwenda tu bila kufanya kazi kwa ukimya.
Kwa hivyo kuna sheria ifuatayo: msimbo wako
unapaswa kushika tu madai ambayo
unajua jinsi ya kuyashinda. Ikiwa dai
hailijulikani, basi linahitaji kupitishwa
mbali kwa kutumia throw. Katika hali hii
juu zaidi mtu mwenye ujua zaidi ataiweza
au dai litaonekana kama hitilafu kwenye koni.
Wacha tusahihishe msimbo wetu:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON ya bidhaa si sahihi');
} else if (error.name == 'ProductCostError') {
alert('Bidhaa hana bei au kiasi');
} else {
throw error; // kupitisha dai kutoka nje zaidi
}
}
Kuna msimbo ufuatao:
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('nafasi imekwisha kwenye hifadhi');
}
if (error.name == 'SyntaxError') {
alert('JSON si sahihi');
}
}
Nini kimeshindwa katika msimbo huu? Irekebishe kuwa nafanasa zaidi.