js异常捕获

106 阅读1分钟

js错误处理

前言:之所以要进行错误的处理,是因为js是单线程的程序,如果程序一旦发生了异常,则会造成主题应用程序发生异常,进而引发生产事故。

局部异常捕获

try catch(只支持同步异常,捕获不到异步异常)

 // 其中catch和finally两者中只有一个是必需的
 try {
   // 可能出现异常的代码
 } catch(error){
   // 进行错误处理 
 } finally {
 ​
 }

全局异常捕获

配置vue的全局拦截器

 // main.js全局文件进行配置
 app.config.errorHandler = (err) => { 
     navigator.sendBeacon(url, {error: error.message, text: 'vue运行异常' })
 }

JS异常与静态资源加载异常

 window.addEventListener(
   "error",
   function (event) {
     if (event.target?.src || event.target?.href) {
       // 资源加载错误
     } else {
       // 执行错误
     }
   }
 );
 ​
 window.addEventListener(
   "unhandledrejection",
   function (event) {
     // 未被捕获的 Promise 错误
   }
 );

配置axios响应拦截器(请求错误捕获)

 const axiosapi = axios.create({
     baseURL:'http://localhost:3000',
     timeout:5000,//连接超时
 });
  
 //2. 定义请求拦截器:给所有请求都带上token
 axiosapi.interceptors.request.use((req)=>{
     let token = sessionStorage.getItem('Auth');//获取页面存储的token
     if (token) {
         req.headers['Auth'] = token;//将token添加至请求头对象的Auth属性中
     }
     return req;
 },(error)=>{//返回错误的信息
     return Promise.reject(error);
 });
  
 //3. 定义响应拦截器: 对服务器响应客户端的数据进行统一处理
 axiosapi.interceptors.response.use(res=>{
     //3.1 对响应数据进行处理
     let data = res.data;
     let code = data.code;
     if(code === 200){
         //请求成功时,将res.data对象返回给响应对象
         return data;
     } else {
         return Promise.reject(data);
     }
 },(error)=>{
     return Promise.reject(error);
 })