Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 如何在Vue中实现全局错误处理_Vue.js_Error Handling_Vuejs2 - Fatal编程技术网

Vue.js 如何在Vue中实现全局错误处理

Vue.js 如何在Vue中实现全局错误处理,vue.js,error-handling,vuejs2,Vue.js,Error Handling,Vuejs2,我希望在Vue.JS中有全局错误处理,就像Angular 2+中的错误处理系统一样。我已经尝试了这么多,但我找不到一个好的方法来实现这种处理 假设您有许多服务方法,并且这些方法应该一个接一个地运行(我的意思是在彼此内部),那么在prevoius服务中编写then和catch方法是如此丑陋和不干净,现在我正在寻找干净的方法来实现这种方法。我希望你理解我的意思。我希望我正确理解你的问题,但这可能就是你想要的 错误捕获 类型:(err:Error,vm:Component,info:string)=>

我希望在Vue.JS中有全局错误处理,就像Angular 2+中的错误处理系统一样。我已经尝试了这么多,但我找不到一个好的方法来实现这种处理


假设您有许多服务方法,并且这些方法应该一个接一个地运行(我的意思是在彼此内部),那么在prevoius服务中编写then和catch方法是如此丑陋和不干净,现在我正在寻找干净的方法来实现这种方法。我希望你理解我的意思。

我希望我正确理解你的问题,但这可能就是你想要的

错误捕获 类型:(err:Error,vm:Component,info:string)=>?布尔值

详细信息:当发现来自任何子组件的错误时调用 捕获。钩子接收三个参数:错误、组件 触发错误的实例,以及包含信息的字符串 在捕获错误的位置。钩子可以返回false以停止 进一步传播的错误


小心它的Vue 2.5.0+

正如@Badgy所提到的,您可以安装一个Vue错误处理程序来捕获Vue遇到的错误。这可以通过以下方式完成:

 Vue.config.errorHandler = function (err, vm, info) {
   // handle error
   // `info` is a Vue-specific error info, e.g. which lifecycle hook
   // the error was found in. Only available in 2.2.0+
 }
上述代码可以在javascript中的任意位置找到。我在创建vue实例之前找到了代码。i、 我的
var-app之前的e=new-Vue({…})代码。因为它是一个全局vue错误处理程序,所以它将处理来自vue所有实例以及vue组件的错误。我发现在实践中,它主要捕获vue渲染方法中发生的错误

您可以在以下官方文件中了解更多信息:

对于更一般(与vue无关)的javascript错误,您仍然需要一个全局错误处理程序,如下所示:

 window.onerror = function (msg, url, line, col, error) {
     //code to handle or report error goes here
 }
同样,此代码可以放在允许javascript的任何地方,但通常您希望将其放在javascript堆栈的早期运行。您可以在此处阅读更多关于此的信息:

最后,为了捕获“承诺拒绝”(即从承诺函数抛出异常),我们需要侦听
未处理的拒绝事件,因为承诺拒绝不会被
窗口捕获。onerror
机制(感谢@Blauhirn提供的提示)。在某些浏览器(当前为Chrome和Edge)中,可以通过以下方法捕获拒绝承诺:

 window.addEventListener('unhandledrejection', function(event) {
     //handle error here
     //event.promise contains the promise object
     //event.reason contains the reason for the rejection
 });

有关更多信息,请参阅此StackOverflow问题:

感谢您的参与@Badgy。“你能告诉我该如何实现这个功能吗?”@hamidhasani这对我来说有点太深入了,我现在没时间在这里解释。在这里,我向您推荐这篇文章
https://catchjs.com/Docs/Vue
,我想这会对你有很大帮助。祝你好运,这很好,但不会在生产中捕获抛出的错误。在那里,您还需要
window.addEventListener('unhandledrejection',()=>{…})
。但是,这几乎只有在chrome+edge.Setting-up window.OneError中才得到支持。它肯定会在生产中捕获抛出错误。@Blauhirn进一步研究后,您提到的事件侦听器似乎是捕获承诺拒绝的一种新兴方法(promise函数中抛出的异常。显然window.error不会捕捉到这些异常。感谢大家的提醒,我将把它添加到我的答案中。一个提示,
Vue.config.errorHandler
默认值是
undefined
,这将由
console.error
记录。但是如果开发人员在构建过程中删除
console
使用像
UglifyJs
这样的插件时,错误日志将丢失。@先升路谢谢,这是一个有趣的见解!我不清楚您建议添加什么(如果有的话)来改进VueJs错误处理代码。在我的回答中有没有改进代码的方法?