การโยนข้อยกเว้นใน JavaScript
พิจารณาบล็อก catch ของงานที่มี JSON ของผลิตภัณฑ์:
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 ไม่ถูกต้อง');
}
}
มีอะไรผิดปกติกับโค้ดนี้? แก้ไขมันให้ ดีขึ้น