开发者社区> 问答> 正文

Axios 如何取消已发送的请求?

Axios 如何取消已发送的请求?

展开
收起
社区秘书 2019-12-16 14:19:35 1643 0
1 条回答
写回答
取消 提交回答
  • 
    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
    
    Axios 使用 cancel token 取消请求
    
    Axios 的 cancel token API 基于cancelable promises proposal,它还处于第一阶段。
    
    Axios 如何取消已发送的请求?
    
    可以使用 CancelToken.source 工厂方法创建 cancel token,像这样:
    
    var CancelToken = axios.CancelToken;
    var source = CancelToken.source();
    axios.get('/user/12345', {
     cancelToken: source.token
    }).catch(function(thrown) {
     if (axios.isCancel(thrown)) {
     console.log('Request canceled', thrown.message);
     } else {
     // 处理错误
     }
    });
    // 取消请求(message 参数是可选的)
    source.cancel('Operation canceled by the user.');
    //欢迎加全栈开发交流君羊:864305860学习交流
    2.还可以通过传递一个 executor 函数到 CancelToken 的构造函数来创建 cancel token:
    
    var CancelToken = axios.CancelToken;
    var cancel;
    axios.get('/user/12345', {
     cancelToken: new CancelToken(function executor(c) {
     // executor 函数接收一个 cancel 函数作为参数
     cancel = c;
     })
    });
    // 取消请求
    cancel();
    第二种方案:
    
    提取所有的 api 进行封装:
    
    import request from '../utils/request' // 配置过的Axios 对象
    import axios from 'axios' 
    export function getLatenessDetailSize(params, that) { 
     return request({
     url: '/api/v1/behaviour/latenessDetailSize', 
     method: 'post',
     params: params,
     cancelToken: new axios.CancelToken(function executor(c) { // 设置 cancel token
     that.source = c;
     })
     })
    }
    export xxx
    具体的业务组件:
    
    import { getLatenessDetail } from "../api";
    export default {
     data() {
     return {
     tableData: [],
     total: 0,
     page: 1,
     loadTable: false,
     params: { },
     source: null
     }
     },
     methods: {
     cancelQuest() {
     if (typeof this.source === 'function') {
     this.source('终止请求'); //取消请求
     }
     },
     getTableData(val) {
     this.cancelQuest() // 请求发送前调用
     this.page = val
     this.loadTable = true
     getLatenessDetail(this.params, (val - 1) * 10, this)
     .then(
     res => {
     this.loadTable = false
     this.tableData = res.data
     }
     )
     }
    }
    
    2019-12-16 14:19:44
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载