我有以下代码:
var test = {
func1: function() {...},
func2: function() {...},
func3: function() {...}
};
现在,我希望能够捕获可能在func1 / 2/3中抛出的任何异常。有没有一种优雅的方法来实现这一点,而无需在每个函数中插入try catch?
每个函数都会调用第三方库,因此使用window.onerror
只会给我一个非常通用的Script error
,我无法使用它(显然是由于交叉原点问题)
代码在WPF中的WebBrowser控件中执行,其中浏览器以IE10为目标。除了纯粹的javascript和jQuery之外,我不允许使用任何东西。
每当捕获到异常时,我会将其进一步传播到底层的viewmodel,然后将其记录在服务器上。
答案 0 :(得分:1)
你可以自己构建一个可重复使用的包装器:
function wrap(f) {
return function() {
try {
return f.apply(this, arguments);
}
catch (e) {
errorHandler(e, f);
throw e; // Or not, but if not, what would you return?
}
};
}
然后:
var test = {
func1: wrap(function() {...}),
func2: wrap(function() {...}),
func3: wrap(function() {...})
};
或
var test = {
func1: function() {...},
func2: function() {...},
func3: function() {...}
};
Object.keys(test).forEach(function(key) {
var func = test[key];
if (typeof func === "function") {
test[key] = wrap(func);
}
});