vue-全局错误处理

我们之前调用api,当后端报错比如404或者直接500错误,则页面会出现一直转圈的情况。
api错误一般可以在axios的拦截中处理掉。如果错误处理情况覆盖不全,那么就会出现报错无人处理。这时候可以将错误抛给全局错误处理函数。

// common.js
// errorHandler指定组件的渲染和观察期间未捕获错误的处理函数
// err错误对象
// vm Vue实例
// 可以捕获promise异步错误。
// `info` 是 Vue 特定的错误信息,比如错误所在的生命周期钩子
// 只在 2.2.0+ 可用
export function errorHandler (err, vm, info) {
	if (err.isAxiosError) {
		// 处理全局状态。
		...
		// 提示、或者跳转错误页面。
		Message.error({
			message: err.message,
			customClass: 'm-z-index'
		})
	}
	...
}
// main.js
import {errorHandler} from '@/common.js'
Vue.prototype.errorHandler = errorHandler
Vue.proptotype.$throw = err => errorHandler(err, this)
// 页面中使用
try {
	this.loading = true
	await res = this.$http.xxx()
	// 如果成功
	...
} catch(error) {
	// 失败后关闭当前页面的加载
	this.loading = false
	...
	this.$throw(error) // 如果api拦截没处理,可以主动抛给全局处理。
	...
}
// 为什么要使用try catch。
// 因为这样在使用async-await的时候,可以处理当前页面的一些状态。

errorCaptured 比较

errorHandler
  1. 指定组件的渲染和观察期间未捕获错误的处理函数
  2. 全局最高错误处理级别
errorCaptured
  1. 当捕获一个来自子孙组件的错误时被调用
  2. 不能捕获异步promise内部抛出的错误和自身的错误
  3. 能够返回 false 以阻止错误继续向上传播
  4. errorCaptured 发生在前,且如果某个组件的 errorCaptured 方法返回了 false,那么这个异常信息不会再向上冒泡也不会再调用 errorHandler 方法

总结:errorCaptured相当于中间层可以用来拦截报错,忽略处理。也可以在组件中独立处理当前页面的情况。而errorHandler是所有错误的最终处理位置。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值