通过抛出setTimeout()来处理JavaScript异常的任何问题
Any problems with handling a JavaScript exception by throwing in a setTimeout()?
我有一个函数可能会引发异常。我想把这个异常暴露为抛出的异常(本质上是相同的UI体验,这样它就可以在浏览器窗口和控制台以及任何调试工具中显示为异常)。但我不希望异常停止执行原始函数。这个问题的一个解决方案是捕获并重新抛出异常,但在setTimeout()内。这样,它将在以后被调用,但不会中断它最初发生的函数。
示例:
var f = function() {
try {
// exception could throw in here somewhere
} catch (e) {
setTimeout(
function() {
throw e;
},
100
);
}
}
我的问题是,这种方法有什么陷阱吗?(除了显而易见的,它可能会稍微延迟报告?)或者这在JavaScript社区中是一个相对安全且被广泛接受的习惯用法吗?有什么小的改进吗?
澄清:我希望避免使用console.log和console.error,因为它们是非标准的,console.log的用户体验与throw e
不同。
如果您只想在控制台中报告错误而不中断执行,请使用
console.error(e);
相反。这可能会在IE中引起一些问题,因为在开发工具未打开时未定义console
。所以你可以做
console = window.console || {error: function(){}};
在代码开头的某个地方,或者如果是一个你想报告错误的地方
console && console.error(e);
编辑:
如果你无论如何都想抛出错误,没有必要等待很长时间——你可以做
setTimeout(function() {
throw new Error('Some meaningful error message. Caused by: ' + e.toString());
}, 0);
这将在UI线程处于空闲模式时执行。我也建议用有意义的描述重新抛出异常,因为您已经知道它发生在哪里(可能还有为什么)。
如果您只想将错误写入控制台,则无需超时:
var f = function() {
try {
// exception could throw in here somewhere
} catch (e) {
console.error(e);
}
}
相关文章:
- javascript处理一个对象数组以获得一个新的对象数组
- 使用JavaScript处理JSON数据
- AJAX调用后使用JavaScript处理数据(CakePHP 2.6.x)
- 当send_data完成时,Rails send_data和Javascript处理程序
- 使用javascript处理XMLHttpRequest的正确方法
- Html<输入模式>使用JavaScript处理-超过时失败
- 在服务器上创建一个复选框,使用 javascript 处理函数
- Html+javascript处理网站中的语言
- 通过Javascript处理Windows Phone 7后退按钮
- 如何用JavaScript处理SQLite中snippet()的返回值
- Javascript处理v8引擎的内存泄漏问题
- 如何使用jquery/javascript处理来自多个动态创建的锚标记的onclick事件
- 我应该如何使用Javascript处理这个html表单
- 一个用 PHP 或 JavaScript 处理的大型数组
- 如何使用javascript处理大型html文本页面
- Javascript - 处理加载后生成内容的最佳方式
- 将悬停CSS添加到用javascript处理的表单元格中
- 使用 javascript 处理表单并在弹出窗口中使用它
- JavaScript 处理框架添加 NaN
- 使用参数调用 JavaScript 处理程序