JavaScript'те көтөрүлгөн исключениелерди өткөрүп жиберүү
JSON продуктусу менен кызматтын catch блогун карап көрөлү:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Туура эмес JSON продуктусу');
} else if (error.name == 'ProductCostError') {
alert('Продуктта баасы же саны жок');
}
}
Көрүп тургандай, биз эки пландалган исключениени кармап, ага кандайдыр бир жооп беребиз.
Бирок, биз тарабынан пландалбаган башка түрдөгү исключение пайда болсо эмне болот? Бул учурда
ал да catch блогуна түшөт, бирок ага эч кандай жооп болбойт, анткени
башка түрдөгү исключение биздин эч бир if'керизмебизге дал келбейт.
Мен эч кандай жооп болбойт деп айтканымда, чындыгында эч нерсе болбойт дегенди түшүндүрөм: консольго катанын чыгышы да болбойт. Биздин код жөн гана үн чыгарбай иштебей калат.
Ошондуктан төмөнкү эреже бар: сиздин
код өзү кантип чечерин билген исключениелерди гана кармашы керек. Эгерде исключение
белгисиз болсо, анда аны өткөрүп жиберүү
керек, 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');
}
}
Бул код менен эмне туура эмес? Аны туурарак вариантына оңдоп бергиле.