გამონაკლისების გადაგდება 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');
}
}
რა არის არასწორი ამ კოდში? გაასწორეთ ის უფრო წარმატებულ ვერსიაზე.