loading加载和统一异常处理

本文档展示了如何在Vue项目中利用ElementUI的Loading组件进行数据加载时的显示和隐藏,并在axios的请求和响应拦截器中进行统一的加载效果管理和异常处理。通过单例模式确保加载动效的正确显示与关闭,确保了用户体验的流畅性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

loading加载

1.按需导入 ElementUI 组件  Loading 

2.加载数据时, 打开和关闭 对象 (注意: loadingInstance 实例采用单例模式创建,防止响应异常时频繁切换路由时加载动效重复创建)

3.​​​​​​​请求拦截器中打开加载效果, 响应拦截器和异常中关闭加载效果.


统一异常处理 

在响应拦截器中设置


加载和统一异常处理的完整代码:

import axios from 'axios';
import { Loading, Message } from 'element-ui';

const loading = {
  loadingInstance: null, //loading实例
  // 打开加载
  open: function () {
    // 创建实例,而且会加载窗口
    if (this.loadingInstance === null) {
      //采用单例
      this.loadingInstance = Loading.service({
        target: '.main',
        text: '拼命加载中'
      });
    }
  },

  // 关闭加载
  close: function () {
    // 不为空时,则关闭加载窗口
    if (this.loadingInstance !== null) {
      this.loadingInstance.close();
    }
    this.loadingInstance = null;
  }
};
const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000 //请求超时,5000毫秒
});
// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 请求拦截
    // 打开加载窗口
    loading.open();
    return config;
  },
  (error) => {
    // 关闭加载窗口
    loading.close();
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 响应拦截
    // 关闭加载窗口
    loading.close();

    const resp = response.data;
    // 后台正常响应的状态,如果不是2000,说明后台处理有问题
    if (resp.code !== 2000) {
      Message({
        message: resp.message || '系统异常',
        type: 'warning',
        duration: 5 * 1000
      });
    }
    return response;
  },
  (error) => {
    // 关闭加载窗口
    loading.close();

    //断网会出现这样的错误 |请求路径错误
// 当请求接口出错时, 进行弹出错误提示, 如 404, 500, 请求超时
console.log('response error', error.response.status) 
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    });
    return Promise.reject(error);
  }
);

export default request;

在前端项目中,使用axios库进行前后端数据交互时,有效地封装请求响应拦截器是提高代码质量用户体验的重要手段。以下是如何实现这一目标的详细步骤建议: 参考资源链接:[axios异常处理封装:拦截器应对网络问题](https://wenku.youkuaiyun.com/doc/64560ec995996c03ac15df5e?spm=1055.2569.3001.10343) 首先,对于请求拦截器,我们可以在发送请求之前添加一些通用的处理逻辑,比如在请求头中添加token进行身份验证、设置loading状态等。同时,拦截器也为我们提供了一个处理异常的好机会,例如网络超时或请求错误。 ```javascript import axios from 'axios'; import { Toast } from 'mint-ui'; // 添加请求拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么,比如添加token const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } // 显示*** ***mit('showLoading'); return config; }, function (error) { // 对请求错误做些什么 ***mit('hideLoading'); return Promise.reject(error); }); ``` 接下来是响应拦截器,它主要用于处理从服务器返回的数据,根据状态码或错误信息进行相应的业务逻辑处理。 ```javascript // 添加响应拦截器 axios.interceptors.response.use(function (response) { // 对响应数据做点什么 ***mit('hideLoading'); // 根据业务需求可以在这里对返回的数据进行处理 return response.data; }, function (error) { // 对响应错误做点什么 ***mit('hideLoading'); // 可以根据不同的错误类型来显示不同的提示信息 Toast({ message: '加载失败!', duration: 2000 }); return Promise.reject(error); }); ``` 通过上述代码,我们统一了网络请求的异常处理用户反馈,使得整个应用在面对网络问题时,能够更加稳定友好。同时,我们也应当考虑到不同环境下的异常处理,比如生产环境开发环境可能会有不同的日志记录需求。 封装后的axios实例可以像这样使用: ```javascript // 使用封装后的axios进行请求 axios({ method: 'get', url: '/user/12345' }).then(response => { // 处理成功的响应 console.log(response); }).catch(error => { // 处理错误 console.error(error); }); ``` 这种方式极大地提高了代码的复用性维护性,同时为用户提供了更加流畅的体验。如果希望深入学习如何使用axios拦截器优化网络请求处理,可以参考《axios异常处理封装:拦截器应对网络问题》一文,其中详细介绍了相关技巧最佳实践。 参考资源链接:[axios异常处理封装:拦截器应对网络问题](https://wenku.youkuaiyun.com/doc/64560ec995996c03ac15df5e?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值