如何统一监听Vue组件的报错


window.onerror

  • 全局监听所有JS错误
  • 但它是JS级别的,识别不了Vue组件信息
  • 捕捉一些Vue监听不到的错误
  • 可以捕捉到异步错误
 mounted() {
   window.onerror = function(msg, source, line, column, error) {
     console.info(msg, source, line, column, error)
   }
 }

errorCaptured生命周期

  • 监听所有下级组件的错误
  • 返回false会阻止错误向上的传播
  • 无法捕获到异步的错误,需要靠window.error处理
errorCaptured(err, vm, info) => {
  console.info('errorCaptured----', err, vm, info)
  return false
}

errorHandler配置

  • Vue全局错误监听,所有组件错误都会汇总到这里
  • 但errorCaptured返回false,不会传播到这里
const app = createApp(App)

app.config.errorHandler = (error, vm, info) => {
  console.info('errorHandler---', error, vm, info)
}
app.use(router).mount('#app')

onunhandledrejection

  • 监听promise catch的错误
window.onunhandledrejection = function(e) {
  console.log(e.reason);
}

总结

  • errprCaptured监听下级组件错误,返回false阻止向上传播
  • errorHandler监听全局Vue组件的错误
  • window.onerror监听其它JS错误,如异步
vue