我决定从另一个角度看待提出的问题。
我已经能够确定一种方法来紧密允许所请求的代码模式,同时部分解决另一个评论者列出的未处理错误对象。
代码可以在@ http://jsfiddle.net/Abyssoft/RC7Nw/4/
try:catch放置在for循环中,允许顺利通过。同时能够迭代所需的所有功能。当需要显式错误处理时,使用附加功能数组。在错误和带有错误处理程序的功能数组的偶数不是函数的情况下,将错误转储到控制台。
根据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();