• axios构建请求池处理全局loading状态&&axios避免重复请求


    很多时候我们能够看到类似进度条一样的东西在页面顶部进行加载,代表页面是否加载完成,或者其他的loading效果,我们当然不可能通过promise.all来讲所有的请求合并到一起然后进行处理,这个时候我们可以通过一个计数器,然后监听axios的请求发送来进行处理

    //定义计时器
    let loadCount = 0;
    
    
    // 请求前
    http.interceptors.request.use(
      config => {
        loadCount++;
        // LoadingBar.start()
        // loading加载
        return config
      },
      err => {
        return Promise.reject(err)
      }
    )
    //请求后
    http.interceptors.response.use(
      res => {
        loadCount--
        if (!loadCount) {
          //LoadingBar.end();
          //结束loading
        }
        return res;
      },
      err => {
        loadCount--;
        if (!loadCount) {
          //LoadingBar.end();
          //结束loading
        }
        return Promise.reject(err);
      }
    )

     在一些特殊的需求里面,我们可能会重复的进行请求,比如即时搜索,虽然有时候可以通过节流的方式处理一下, 但是难免会遇到第一次请求比第二次请求晚返回的情况,导致呈现的数据不准确,所以我们可以通过中断请求来防止此类情况发生

    // 请求前
    http.interceptors.request.use(
      config => {
        if(config.cancelToken && config.cancelObj && config.cancelObj.cancel) {
            config.cancelObj.cancel('中断请求');
            delete config.cancelObj;
        }
        return config;
      },
      err => {
        return Promise.reject(err)
      }
    );
    
    //使用
      //工厂方法创建CancelToken
    var CancelToken = axios.CancelToken;
    var source = CancelToken.source();
    axios.get('/user/12345', {
      cancelToken: source.token,
      cancelObj: source
    }).catch(function(err) {
      if (axios.isCancel(err)) {
        console.log('Request canceled', thrown.message);
      } else {
        // 处理错误
      }
    });
  • 相关阅读:
    数据库数据格式化之Kettle Spoon
    NopCommerce开源项目中很基础但是很实用的C# Helper方法
    oracle 两个逗号分割的字符串 如何判断是否其中有相同值
    MongoDB+MongoVUE安装及入门
    C#中Dictionary<TKey,TValue>排序方式
    kettle的基本介绍
    Kettle能做什么?
    oracle like 条件拼接
    loading加载和layer.js
    关于bootstrap的treeview不显示多选(复选框)的问题,以及联动选择的问题,外加多选后取值
  • 原文地址:https://www.cnblogs.com/timmer/p/8615397.html
Copyright © 2020-2023  润新知