別の角度から提示された問題を見ることにしました。
別のコメンターによってリストされた未処理のエラーオブジェクトに部分的に対処しながら、要求されたコードパターンを厳密に許可する方法を決定することができました。
コードはhttp://jsfiddle.net/Abyssoft/RC7Nw/4/で見ることができます
try:catchは、優雅なフォールスルーを可能にするforループ内に配置されます。必要なすべての機能を反復することができます。明示的なエラー処理が必要な場合は、追加の関数配列が使用されます。エラーとエラーハンドラー要素を持つ関数配列が関数でない場合でも、エラーはコンソールにダンプされます。
ここでのスタックオーバーフローの要件ごとに、インラインコードがあります[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();