ใน Javascript สมมติว่าฉันต้องการดำเนินการล้างข้อมูลเมื่อเกิดข้อยกเว้น แต่ให้ข้อยกเว้นดำเนินการต่อไปเพื่อกระจายสแต็กเช่น:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
ปัญหาของรหัสนี้คือการจับและ rethrowing ข้อยกเว้นทำให้ข้อมูลการติดตามสแต็กถึงจุดนั้นหายไปดังนั้นหากข้อผิดพลาดถูกดักจับในภายหลังอีกครั้งสูงขึ้นบนสแต็กการติดตามสแต็กจะลงไปที่ -โยน. สิ่งนี้แย่เพราะมันหมายความว่ามันไม่มีฟังก์ชั่นที่ทำให้เกิดข้อยกเว้น
ตามที่ปรากฎลอง .. ในที่สุดก็มีพฤติกรรมเหมือนกันใน Chrome อย่างน้อย (นั่นคือไม่ใช่การโยนซ้ำที่เป็นปัญหาอย่างแม่นยำ แต่มีตัวจัดการบล็อกข้อยกเว้นอยู่เลย)
ไม่มีใครรู้วิธีที่จะ rethrow ข้อยกเว้นใน Javascript แต่รักษาร่องรอยสแต็คที่เกี่ยวข้องกับมันได้หรือไม่ ความล้มเหลวนั้นวิธีการเกี่ยวกับคำแนะนำสำหรับวิธีอื่น ๆ ในการเพิ่มตัวจัดการการล้างข้อมูลบนข้อยกเว้นที่ปลอดภัยขณะเดียวกันก็จับการติดตามสแต็กที่สมบูรณ์เมื่อมีข้อยกเว้นเกิดขึ้น
ขอบคุณสำหรับคำแนะนำใด ๆ :)