JavaScript'te İstisnaları Fırlatma
JSON ürün görevinin catch bloğunu ele alalım:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Geçersiz ürün JSON\'u');
} else if (error.name == 'ProductCostError') {
alert('Üründe fiyat veya miktar eksik');
}
}
Gördüğünüz gibi, planladığımız iki istisnayı
yakalıyoruz ve buna bir şekilde tepki veriyoruz.
Peki ya bizim tarafımızdan planlanmamış, başka
türde bir istisna ortaya çıkarsa? Bu durumda,
o da catch bloğuna düşecek, ancak
başka bir türdeki istisna hiçbir if koşulumuza
uymayacağı için bu duruma herhangi bir tepki
gelmeyecek.
Hiçbir tepki olmayacak derken, kastettiğim gerçekten hiçbir tepki olmaması: konsola hatta bir hata bile yazılmayacak. Kodumuz sessizce çalışmayacak.
Bu nedenle şu kural vardır: kodunuz yalnızca
nasıl başa çıkacağını bildiği istisnaları
yakalamalıdır. Eğer istisna bilinmiyorsa,
throw kullanarak onu fırlatmak
gerekir. Bu durumda, onu yukarıda daha bilgili
biri yakalar ya da istisna konsola hata olarak
düşer.
Kodumuzu düzeltelim:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Geçersiz ürün JSON\'u');
} else if (error.name == 'ProductCostError') {
alert('Üründe fiyat veya miktar eksik');
} else {
throw error; // istisnayı daha ileriye fırlat
}
}
Aşağıdaki kod verilmiştir:
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('depolama alanı doldu');
}
if (error.name == 'SyntaxError') {
alert('geçersiz JSON');
}
}
Bu kodun nesi yanlış? Daha iyi bir versiyona düzeltin.