前端异常捕获

2 篇文章 0 订阅
1 篇文章 0 订阅

前端异常捕获方法:

try…catch…
try{
	const  a = 1;
	   	   c = a+b
}catch(error){
	console.error(error)//打印异常 ReferenceError: b is not defined
}

//使用try catch能够很好的捕获异常并对应进行相应处理,不至于让页面挂掉,但是其存在一些弊端,比如需要在捕获异常的代码上进行包裹,会导致页面臃肿不堪,不适用于整个项目的异常捕获。
window.onerror()
相较于try…catch… , window.onerror ()能全局异常捕获,但无法捕获跨域资源出现的异常和webpack打包压缩文件时生成的source-map
window.onerror = (errorMessage, scriptURI, lineNo, columnNo, error) => {
    console.error('errorMessage: ' + errorMessage); // 异常信息
    console.warring('scriptURI: ' + scriptURI); // 异常文件路径
    console.warring('lineNo: ' + lineNo); // 异常行号
    console.warring('columnNo: ' + columnNo); // 异常列号
    console.error('error: ' + error); // 异常堆栈信息
};
vue.config.errorHandler
vue中封装的异常捕获方法
Vue.config.errorHandler = function (err, vm, info) {
    let { 
        message, // 异常信息
        name, // 异常名称
        script,  // 异常脚本url
        line,  // 异常行号
        column,  // 异常列号
        stack  // 异常堆栈信息
    } = err;

    // vm为抛出异常的 Vue 实例
    // info为 Vue 特定的错误信息,比如错误所在的生命周期钩子
}
从 2.2.0 起,这个钩子也会捕获组件生命周期钩子里的错误。同样的,当这个钩子是 undefined 时,被捕获的错误会通过 console.error 输出而避免应用崩溃。
从 2.4.0 起,这个钩子也会捕获 Vue 自定义事件处理函数内部的错误了。
从 2.6.0 起,这个钩子也会捕获 v-on DOM 监听器内部抛出的错误。另外,如果任何被覆盖的钩子或处理函数返回一个 Promise 链 (例如 async 函数),则来自其 Promise 链的错误也会被处理。
错误追踪服务 SentryBugsnag 都通过此选项提供了官方支持。
参考:errorHandler
Error Boundary:
react中的异常捕获方法
class ErrorBoundary extends React.Component {
    constructor(props) {
        super(props);
        this.state = { hasError: false };
    }

    componentDidCatch(error, info) {
        this.setState({ hasError: true });

        // 将异常信息上报给服务器
        logErrorToMyService(error, info); 
    }

    render() {
        if (this.state.hasError) {
            return '出错了';
        }

        return this.props.children;
    }
}
使用
<ErrorBoundary>
    <MyWidget  />
</ErrorBoundary>
参考:Error Boundary
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值