Истисно додани истисноҳо дар JavaScript
Блоки catch-ро бо маҳсулоти JSON дида мебароем:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON-и маҳсулот нодуруст аст');
} else if (error.name == 'ProductCostError') {
alert('Маҳсулот нарх ё миқдор надорад');
}
}
Чунон ки шумо мебинед, мо ду истиснои барномарезишударо мегирем ва ба он чандон посух медиҳем.
Аммо чӣ мешавад, агар истиснои надидаи мо аз навъи дигар пайдо шавад? Дар ин ҳолат,
он ҳам ба блоки catch меафтад, аммо ҳеҷ посухе ба он дода намешавад, зеро
истисно бо навъи дигар танҳо ба яке аз шартҳои мо намеафтад.
Вақте ки ман мегӯям, ки ҳеҷ посухе нест, ман дар назар дорам, ки воқеан ҳеҷ чиз: ҳатто хатогиро ба консол мебарояд. Коди мо танҳо хомӯш кор намекунад.
Аз ин рӯ, қоидаи зерин мавҷуд аст: коди шумо бояд танҳо истисноҳоеро бигирад, ки бо онҳо медонад, ки чӣ гуна кор кунад. Агар истисно номаълум бошад, пас онро бо ёрии throw ба дигар ҷо гузаронидан лозим аст. Дар ин ҳолат,
касе, ки бештар огоҳ аст, онро мегирад ё истисно хатогӣ ба консол меафтад.
Биёед коди худро ислоҳ кунем:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON-и маҳсулот нодуруст аст');
} else if (error.name == 'ProductCostError') {
alert('Маҳсулот нарх ё миқдор надорад');
} else {
throw error; // истисноро ба дигар ҷо мефиристем
}
}
Коди зерин дода шудааст:
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('ҷой дар анбори маълумот тамом шуд');
}
if (error.name == 'SyntaxError') {
alert('JSON нодуруст аст');
}
}
Ин код чӣ гап дорад? Онро ба версияи беҳтар ислоҳ кунед.