参见的错误分类
- js运行错误
- 资源加载错误
- 未处理的promise错误
- 异步请求错误
js 运行错误
window.onerror 与 winod.addEventListenr(‘error’) 捕获 js 运行时错误
window.error = function (msg, url, lineNo, columnNo, error) {
// demo
// msg: Uncaught TypeError: Uncaught ReferenceError: a is not defined
// error.statck: TypeError: ReferenceError: a is not defined at
// window.addEventListener('error', event => (){
// 处理错误信息
}
window.addEventListener('error', event => (){
// 处理错误信息
}, false);
资源加载错误
资源加载错误使用addEventListener去监听error事件捕获
window.addEventListener('error', event => (){
// 过滤js error
let target = event.target || event.srcElement;
let isElementTarget = target instanceof HTMLScriptElement || target instanceof HTMLLinkElement || target instanceof HTMLImageElement;
if (!isElementTarget) return false;
// 上报资源地址
let url = target.src || target.href;
console.log(url);
}, true);
未处理的 Promise 错误处理方式
实现原理:当promise被reject并且错误信息没有被处理的时候,会抛出一个unhandledrejection。
这个错误不会被window.onerror以及window.addEventListener(‘error’)捕获,但是有专门的window.addEventListener(‘unhandledrejection’)方法进行捕获处理。
// 一开始没有捕获错误
window.addEventListener('unhandledrejection', event => {
// 错误的详细信息在reason字段
// demo:settimeout error
console.log(event.reason);
});
// 一开始没有捕获 触发 unhandledrejection 之后,又被处理了 就触发 rejectionhandled
window.addEventListener('rejectionhandled', event => {
console.log('rejection handled'); // 1秒后打印"rejection handled"
});