我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何处理vue项目异常

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何处理vue项目异常

这篇文章主要介绍如何处理vue项目异常,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

背景

  • 你还在为处理Uncaught (in promise) ReferenceError烦恼吗?

  • 你还在为捕获异常反复的写try catch吗?

  • 你还在为每一个promise写catch吗?

是时候一站式统一处理异常!!!(针对vue项目)

全局异常捕获

Vue.config.errorHandler = function (err, vm, info) {
 // 指定组件的渲染和观察期间未捕获错误的处理函数。这个处理函数被调用时,可获取错误信息和 Vue 实例。
 
 // handle error
 // `info` 是 Vue 特定的错误信息,比如错误所在的生命周期钩子
 // 只在 2.2.0+ 可用 
}

注意:面对异常处理,同步异常和异步异常应该区别对待分别处理。

vue核心源码剖析

通过阅读源码看一下vue是如何将Vue.config.errorHandler接口暴露给使用者。

同步异常处理方案

// 定义异常处理函数,判断用户是否自定义Vue.config.errorHandler,定义则直接调用,未定义执行vue本身异常处理。
function globalHandleError(err, vm, info) {
 if (Vue.config.errorHandler) {
  try {
   return config.errorHandler.call(null, err, vm, info)
  } catch (e) {
   logError(e, null, 'config.errorHandler');
  }
 }
 logError(err, vm, info);
}
try {
 // vue正常执行代码被包裹在try内,有异常会调用globalHandleError
} catch (e) {
 globalHandleError(e, vm, '对应信息');
}

异步异常处理方案

// 定义异步异常处理函数,对于自身没有捕获异常的promise统一执行catch
function invokeWithErrorHandling(
 handler,
 context,
 args,
 vm,
 info
) {
 var res;
 try {
  res = args ? handler.apply(context, args) : handler.call(context);
  if (res && !res._isVue && isPromise(res) && !res._handled) {
   res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
   // 异步代码例如promise可以统一为其定义Promise.prototype.catch()方法。
   res._handled = true;
  }
 } catch (e) {
  handleError(e, vm, info);
 }
 return res
}

// 所有的钩子函数调用异常处理函数
function callHook(vm, hook) {
 var handlers = vm.$options[hook];
 // 为所有钩子增加异常处理
 var info = hook + " hook";
 if (handlers) {
  for (var i = 0, j = handlers.length; i < j; i++) {
   invokeWithErrorHandling(handlers[i], vm, null, vm, info);
  }
 }
}

知识延伸

// vue接口是能处理同步异常以及部分钩子中的异步异常,对于方法中的异常无法有效处理,我们可以仿照源码增加方式中的异步异常处理,避免为每一个promise写catch
Vue.mixin({
 beforeCreate() {
  const methods = this.$options.methods || {}
  Object.keys(methods).forEach(key => {
   let fn = methods[key]
   this.$options.methods[key] = function (...args) {
    let ret = fn.apply(this, args)
    if (ret && typeof ret.then === 'function' && typeof ret.catch === "function") {
     return ret.catch(Vue.config.errorHandler)
    } else { // 默认错误处理
     return ret
    }
   }
  })
 }
})

完整代码

下面是全局处理异常的完整代码,已经封装成一个插件

errorPlugin.js


const errorHandler = (error, vm, info) => {
 console.error('抛出全局异常')
 console.error(vm)
 console.error(error)
 console.error(info)
}
let GlobalError = {
 install: (Vue, options) => {
 
  Vue.config.errorHandler = errorHandler
  Vue.mixin({
   beforeCreate() {
    const methods = this.$options.methods || {}
    Object.keys(methods).forEach(key => {
     let fn = methods[key]
     this.$options.methods[key] = function (...args) {
      let ret = fn.apply(this, args)
      if (ret && typeof ret.then === 'function' && typeof ret.catch === "function") {
       return ret.catch(errorHandler)
      } else { // 默认错误处理
       return ret
      }
     }
    })
   }
  })
  Vue.prototype.$throw = errorHandler
 }
}
export default GlobalError

使用

// 在入口文件中引入
import ErrorPlugin from './errorPlugin'
import Vue from 'vue'
Vue.use(ErrorPlugin)

写在最后

增加全局异常处理有助于

  • 提高代码健壮性

  • 减少崩溃

  • 快速定位bug

以上是“如何处理vue项目异常”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何处理vue项目异常

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在java项目中抛出一个异常处理

本篇文章为大家展示了如何在java项目中抛出一个异常处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java 抛出异常处理的方法为了避免调用的人不知道有异常,才抛出异常的,所以是谁掉用的久在哪里处
2023-05-31

Springboot项目中如何实现异常处理自定义

这期内容当中小编将会给大家带来有关Springboot项目中如何实现异常处理自定义,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景Springboot 默认把异常的处理集中到一个ModelAndView
2023-05-31

项目中如何根据vue版本进行差异化处理

这篇文章主要介绍“项目中如何根据vue版本进行差异化处理”,在日常操作中,相信很多人在项目中如何根据vue版本进行差异化处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”项目中如何根据vue版本进行差异化处理
2023-07-04

详解如何在SpringBoot项目中使用全局异常处理

在完整的项目开发中,异常的出现几乎是无法避免的;如果凡是有可能出现异常的地方,我们都手动的使用try-catch将其捕获的话,会使得代码显得十分臃肿并且后期不好维护。本文介绍了pringBoot项目中使用全局异常处理的方法,需要的可以参考一下
2022-11-13

java项目异常处理的方法是什么

在Java项目中,有多种方法可以处理异常,包括:1. try-catch块:使用try-catch块可以捕获并处理异常。在try块中编写可能发生异常的代码,如果发生异常,则在catch块中处理异常。```javatry {// 可能发生异常
2023-09-16

异常处理:PHP中如何捕获和处理异常?

异常处理:PHP中如何捕获和处理异常?在PHP开发中,异常处理是非常重要的一环。当程序发生意外情况或错误时,我们需要通过捕获和处理异常来保证程序的正常运行。PHP中提供了一套异常处理的机制,本文将介绍如何在PHP中捕获和处理异常,并提供具体
异常处理:PHP中如何捕获和处理异常?
2023-12-18

Java异常如何处理

这篇文章主要讲解了“Java异常如何处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java异常如何处理”吧!  你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处
2023-06-03

Golang错误处理计划:优化项目异常处理策略

Golang错误处理计划:优化项目异常处理策略在 Golang 开发中,错误处理一直是一个被广泛讨论的话题。合理的错误处理策略不仅可以提升代码的可靠性,还能使程序更易于维护和调试。本文将从优化项目异常处理的角度出发,分享一些在 Golan
Golang错误处理计划:优化项目异常处理策略
2024-03-09

Springboot项目异常处理及返回结果统一

这篇文章主要介绍了Springboot项目异常处理及返回结果统一,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
2022-11-13

Spring MVC项目中的异常处理怎么配置

这篇文章主要介绍“Spring MVC项目中的异常处理怎么配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring MVC项目中的异常处理怎么配置”文章能帮助大家解决问题。1. 基于配置的简单
2023-06-30

怎么在Java项目中对异常进行处理

本文章向大家介绍怎么在Java项目中对异常进行处理的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页
2023-06-06

在Java项目中运行异常处理时出现异常怎么解决

这篇文章将为大家详细讲解有关在Java项目中运行异常处理时出现异常怎么解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 Java异常处理运行时异常(RuntimeException)详解
2023-05-31

Vue中如何优雅地处理错误与异常?

Vue提供了完善的错误处理机制:全局错误处理、模板错误边界、异步错误处理、Promise错误处理和异常处理对象。开发者可以通过这些机制优雅地处理错误和异常,实现错误日志记录、告警、错误恢复等操作。最佳实践包括:使用全局错误处理程序、针对特定区域使用组件、在异步操作中使用try/catch或await处理错误、根据错误类型使用自定义异常处理对象、记录所有错误并提供清晰的错误消息。
Vue中如何优雅地处理错误与异常?
2024-04-02

如何理解.Net异常处理

本篇文章给大家分享的是有关如何进行.Net异常处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。异常处理 可以使用 TryCatch 活动处理方法执行期间引发的异常。
2023-06-17

Java中如何处理异常

这篇文章主要为大家展示了“Java中如何处理异常”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中如何处理异常”这篇文章吧。1. 在Finally中清理资源或者使用Try-With-Res
2023-06-02

C# System.TypeInitializationException异常如何处理

这篇文章主要介绍“C# System.TypeInitializationException异常如何处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C# System.TypeInitializa
2023-07-05

编程热搜

目录