zoukankan      html  css  js  c++  java
  • axios 取消请求

    解决思路

    在发送第二次请求的时候如果第一次请求还未返回,则取消第一次请求,以保证后发送的请求返回的数据不会被先发送的请求覆盖。

    axios官方文档取消请求说明

    方法一:
    const CancelToken = axios.CancelToken;
    const source = CancelToken.source();
    
    axios.get('/user/12345', {
      cancelToken: source.token
    }).catch(function(thrown) {
      if (axios.isCancel(thrown)) {
        console.log('Request canceled', thrown.message);
      } else {
        // handle error
      }
    });
    
    axios.post('/user/12345', {
      name: 'new name'
    }, {
      cancelToken: source.token
    })
    
    // cancel the request (the message parameter is optional)
    source.cancel('Operation canceled by the user.');
    方法二:
    const CancelToken = axios.CancelToken;
    let cancel;
    
    axios.get('/user/12345', {
      cancelToken: new CancelToken(function executor(c) {
        // An executor function receives a cancel function as a parameter
        cancel = c;
      })
    });
    
    // cancel the request
    cancel();

    可行方案

    代码如下:

    /* 接口listApi.getList方法如下 */
    const CancelToken = axios.CancelToken
    let cancel
    getVideoList ({
      key
    }) {
      return axiosInstance.post('/video/list', {
        key
      }, {
        cancelToken: new CancelToken(function executor (c) {
          cancel = c
        })
      })
    },
    cancelRequest () {
      // 第一次执行videoService.cancelRequest()时还未发送getVideoList请求,会报错,添加如下判断
      if (typeof cancel === 'function') {
        // 取消请求
        cancel()
      }
    }
    
    /* 页面中获取列表的函数 */
    getList (query, cb) {
      // 取消之前的请求
      listApi.cancelRequest()
      // 发送请求
      listApi.getVideoList({key: 'value'}).then(resp => {
        // handle response data
      }).catch(err => {
        if (axios.isCancel(err)) {
          console.log('Request canceled!')
        } else {
          this.$message.error(err.message)
        }
      })
    }

    此时重复发送多次`getVideoList请求时,会取消之前发送的请求保证返回数据为最后一次请求返回的数据。

  • 相关阅读:
    nrm安装与配置
    vue-cli2升级到webpack4
    npm和yarn的区别
    Vite和Vue CLI的优劣
    基于vue+element+select实现的自定义控件selectTree
    Extjs 隐藏tabpanel的header / title
    await/async 总结
    泛型
    jpg图片打包生成pdf文件的几种方式
    varchar(100)和varchar(10)的区别
  • 原文地址:https://www.cnblogs.com/crazycode2/p/9625540.html
Copyright © 2011-2022 走看看