统一监听Vue组件报错方案

2023-03-12  本文已影响0人  蓝海00

1. window.onerror

可以监听当前页面所有的 JS 报错,jQuery时代经常用。
注意,全局只绑定一次即可。不要放在多次渲染的组件中,这样容易绑定多次。
一般在App.vuemounted生命周期中使用。

window.onerror = function(msg, source, line, column, error) {
    console.log('window.onerror---------', msg, source, line, column, error)
}
// 注意,如果用 window.addEventListener('error', event => {}) 参数不一样!

2. errorCaptured 生命周期

会监听所有下级组件的错误。可以返回 false 阻止向上传播,因为可能会有多个上级节点都监听错误。
如果设置了false,那么在 window.onerror 中就不会再报错。
一般在App.vue中使用。

errorCaptured(error, instance, info) {
    console.log('errorCaptured--------', error, instance, info)
}

3. errorHandler

全局的错误监听,所有组件的报错都会汇总到这里来。
如果 errorCaptured 返回 false不会到这里。errorHandler 会阻止错误走向 window.onerror
一般在main.js中使用。

const app = createApp(App)
app.config.errorHandler = (error, instance, info) => {
    console.log('errorHandler--------', error, instance, info)
}

4. 异步错误

组件内的异步错误 errorHandler 监听不到,还是需要 window.onerror
Promise 监听报错要使用 window.onunhandledrejection

mounted() {
    setTimeout(() => {
        throw new Error('setTimeout 报错')
    }, 1000)
},

总结


上一篇下一篇

猜你喜欢

热点阅读