有没有像;一网打尽'JavaScript错误处理程序
Is there such a thing as a 'catch all' JavaScript error handler?
我发现使用异步回调,我需要为每个回调函数编写一个try/catch。这似乎有点容易出错。有没有一种方法或技术可以让我实现一个顶级的try/catch来捕获所有内容?如果不是,我使用的技术是否被认为是良好的实践,或者有更好的方法吗?
有两种方法:
- 设置窗口的
onerror
属性- 使用三个参数(message、url、lineNumber)调用
- 返回
true
(!)将阻止默认的错误处理(使其类似于catch-all)
- 向
window
添加error
事件侦听器- 以错误事件
e
作为其唯一参数调用 - 调用
e.preventDefault()
阻止默认错误处理
- 以错误事件
如果不是,我使用的技术是否被认为是良好的实践,或者有更好的方法吗?
由于JavaScript的动态特性,try/catch
的速度非常慢。几乎总是有更好的方法,例如:在调用某个方法之前检查它是否存在
// bad
try {
document.getElementById('foo').focus();
} catch(e) {
alert('foo not found');
}
//good
var el = document.getElementById('foo');
if (el) {
el.focus();
} else {
alert('foo not found');
}
对于您的具体情况,请出示您的一些代码;也许在另一个问题中。
不,不要一网打尽,这几乎总是会导致问题(因为你不能很好地区分异常)。
依赖全局捕获可能不是一个好主意,但拥有全局捕获也不是一个坏主意(在错误发生在您可能意想不到的地方的情况下)。通过这种方式,您可以按照自己的意愿处理未捕获的错误。
使用jQuery:
$(window).error(function (msg, url, line) {
//do something
});
相关文章:
- javascript:如何在antlr生成的Lexer中进行错误处理
- 生成pdf或其他非html文件时的错误处理
- sailsjs在创建两个模型时的错误处理
- 为什么没有调用我的流错误处理程序
- 错误处理try&catch+回调
- EventSource中的错误处理
- Angular JS中的通用Ajax错误处理-拦截器
- Sinon Mocha节点错误处理
- 如果文件不存在,fs.watch是否有错误处理程序
- Javascript初始化和错误处理
- AngularJS错误处理:根据错误数组显示错误
- JQuery 图像错误处理
- BreezeJS中央错误处理程序和自动重试
- 文件下载html与错误处理FileNotFound
- 使用mongoose保存多个文档时的错误处理
- Node.js如何知道回调的第一个参数是否是错误处理程序
- Meteor JavaScript-错误处理
- AJAX自定义错误处理代码问题
- 正在获取丢失的错误处理程序套接字消息,无法读取属性'timerID'使用Node.js和Socket.i
- 为什么不't JavaScript库使用错误处理