Javascript 文件中的全局错误处理
Global error-handling in Javascript file
我有以下代码:
var test = {
func1: function() {...},
func2: function() {...},
func3: function() {...}
};
现在,我希望能够捕获 func1/2/3 中可能抛出的任何异常。有没有一种优雅的方法可以做到这一点,而不必在每个函数中插入一个 try catch?
每个函数都会调用第 3 方库,所以使用 window.onerror
只会给我一个非常通用的 Script error
,我不能真正使用它(显然是由于跨源问题) .
代码在 WPF 的 WebBrowser 控件中执行,其中浏览器的目标是 IE10。除了纯 javascript 和 jQuery,我不允许使用任何东西。
每当捕获到异常时,我都会将其进一步传播到底层视图模型,然后将其记录在服务器上。
您可以自己构建一个可重复使用的包装器:
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);
}
});
我有以下代码:
var test = {
func1: function() {...},
func2: function() {...},
func3: function() {...}
};
现在,我希望能够捕获 func1/2/3 中可能抛出的任何异常。有没有一种优雅的方法可以做到这一点,而不必在每个函数中插入一个 try catch?
每个函数都会调用第 3 方库,所以使用 window.onerror
只会给我一个非常通用的 Script error
,我不能真正使用它(显然是由于跨源问题) .
代码在 WPF 的 WebBrowser 控件中执行,其中浏览器的目标是 IE10。除了纯 javascript 和 jQuery,我不允许使用任何东西。
每当捕获到异常时,我都会将其进一步传播到底层视图模型,然后将其记录在服务器上。
您可以自己构建一个可重复使用的包装器:
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);
}
});