JavaScript-те сынақтарды лақтыру
JSON өнімі тапсырмасының catch блогын қарастырайық:
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');
}
}
Бұл кодта не дұрыс емес? Оны тиімдірек етіп түзеңіз.