少数情况下无法执行vue的全局errorHandler

问题描述 投票:0回答:1

虽然我在 vue 2 项目中遇到问题,但演示也面临类似的问题,即 main.js 中定义的全局错误处理程序不起作用

Vue 3 https://stackblitz.com/edit/vitejs-vite-svaosh?file=src%2Fmain.js

错误处理程序

app.config.errorHandler = (err) => {
  console.log('error caught');
};

应用程序.vue

<script>
export default {
  created() {
    console.log('jello');
    throw new Error('dasf');
    this.loadData();
  },

  methods: {
    async loadData() {
      throw new Error('dasf');
    },
  },
};
</script>

我希望这两个错误都能被 errorHandler 捕获并只显示一个简单的控制台

我假设错误是在 Vue 上下文中而不是在窗口上下文中,因为 vue 确实将它们显示为像这样的未处理错误

enter image description here

Vue2

我试图以某种方式实现一个可选的错误捕获机制,如果 api 抛出错误,我可以在需要时在组件中捕获它,否则全局错误处理程序捕获它并显示警告 toast 或其他内容。

由于某种原因,它之前工作得很好,我不知道它是如何损坏的,但现在对我来说不起作用,在我的项目中,全局错误处理程序捕获创建的错误,但如果抛出错误则不会捕获错误加载数据

export default {
  async created() {
    this.loadMastersCount();
    throw new Error("dasf"); // this one is caught by global error handler
  },
  methods: {
    async loadMastersCount() {
      throw new Error("dasf"); // this one is not caught and shown in red during dev on on screen
    },
  }
}
javascript vue.js vuejs2 vue-component
1个回答
0
投票

在您的示例中,在注册处理程序之前抛出错误:

const app = createApp(App)
app.mount('#app') // <--- exception is triggered here
app.config.errorHandler = (err) => {...}

在调用

app.mount()
解决问题之前注册处理程序:

const app = createApp(App)
app.config.errorHandler = (err) => {...}
app.mount('#app')
© www.soinside.com 2019 - 2024. All rights reserved.