ฉันตัดสินใจที่จะมองปัญหาที่นำเสนอจากมุมที่ต่างออกไป
ฉันสามารถกำหนดวิธีที่จะอนุญาตอย่างใกล้ชิดสำหรับรูปแบบรหัสที่ร้องขอในขณะที่อยู่ในส่วนที่ระบุถึงออบเจ็กต์ข้อผิดพลาดที่ไม่ได้จัดการซึ่งแสดงโดยผู้แสดงความคิดเห็นรายอื่น
รหัสสามารถมองเห็นได้ @ http://jsfiddle.net/Abyssoft/RC7Nw/4/
ลอง: จับวางไว้ในห่วงเพื่อให้สามารถตกลงไปได้อย่างสง่างาม ในขณะที่สามารถวนซ้ำผ่านฟังก์ชั่นทั้งหมดที่จำเป็น เมื่อจำเป็นต้องจัดการข้อผิดพลาดอย่างชัดเจนจะใช้อาร์เรย์ฟังก์ชันเพิ่มเติม ในอาร์เรย์ข้อผิดพลาดและฟังก์ชันที่มีองค์ประกอบตัวจัดการข้อผิดพลาดไม่ใช่ฟังก์ชันข้อผิดพลาดจะถูกถ่ายโอนไปยังคอนโซล
ตามข้อกำหนดของ stackoverflow นี่คือโค้ดแบบอินไลน์ [แก้ไขเพื่อให้สอดคล้องกับ JSLint (ลบช่องว่างนำหน้าเพื่อยืนยัน) ปรับปรุงความสามารถในการอ่าน]
function func1() {"use strict"; throw "I don't return anything"; }
function func2() {"use strict"; return 123; }
function func3() {"use strict"; throw "I don't return anything"; }
// ctr = Code to Run <array>, values = values <array>,
// eh = error code can be blank.
// ctr and params should match 1 <-> 1
// Data validation not done here simple POC
function testAll(ctr, values, eh) {
"use strict";
var cb; // cb = code block counter
for (cb in ctr) {
if (ctr.hasOwnProperty(cb)) {
try {
return ctr[cb](values[cb]);
} catch (e) {
if (typeof eh[cb] === "function") {
eh[cb](e);
} else {
//error intentionally/accidentially ignored
console.log(e);
}
}
}
}
return false;
}
window.alert(testAll([func1, func2, func3], [], []));
nullและคุณทำสิ่งที่ชอบreturn func1() || func2() || func3();