vue中监听报错方案
文章类型:Vue
发布者:hp
发布时间:2023-05-19
在vue中,有时候异常原因报错,我们需要针对错误进行处理,今天,整理一下方案
1:定义:
2:作用:全局监听所有的js、异步错误
3:局限性:识别不了Vue组件信息,Vue内部的错误还是用Vue来监听
4:代码
window.onerror = function (msg, source, line, column, error) {
console.info('window.onerror----', msg, source, line, column, error)
}
1:定义:主入口文件(如main.js)中创建一个全局错误处理器
2:作用:设置全局错误处理器,在组件发生错误时捕获并集中处理,从而提供更好的错误处理和调试体验
3:局限性:全局错误处理器只能捕获组件内部未被捕获的错误,而无法捕获外部的全局错误
4:代码
Vue.config.errorHandler = function (err, vm, info) {
// 在这里处理错误
//err:捕获到的错误对象。
//vm:报错的Vue组件实例。
//info:包含错误的额外信息,如错误来源组件的标识符等
console.error('Vue组件报错:', err, vm, info);
// 可以将错误信息上报到服务器或执行其他自定义逻辑
}
1:定义:在组件内部创建一个错误处理器
2:作用:观察组件内部的错误
3:局限性:组件内部可用
4:代码
Vue.component('my-component', {
// ...组件配置...
errorCaptured(err, vm, info) {
// 在这里处理错误
console.error('Vue组件报错:', err, vm, info);
// 可以将错误信息上报到服务器或执行其他自定义逻辑
return false; // 如果希望错误继续传播,则返回true;如果希望停止错误传播,则返回false
}
});
1:定义:利用try-catch语句进行捕获和处理特定代码块错误
2:作用:将错误处理逻辑局限在特定的代码范围内,从而更加精确地处理错误
3:局限性:特定的代码块中使用
4:代码
created() {
try {
// 可能出错的代码块
// 执行某些操作可能会引发错误
} catch (error) {
// 在这里处理错误
console.error('Vue组件报错:', error);
// 可以将错误信息上报到服务器或执行其他自定义逻辑
}
}
1:四种方案各有优势,结合使用
2:errorCaptured监听一些重要的、有风险组件的错误
3:window.onerror和errorHandler全局监听
4:特殊:promise(promise没有被catch的报错,使用onunhandledrejection监听)和setTimeout异步