为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
JavaScript

最近遇到一个问题,在连续发送同一请求时,如果第二次请求比第一次请求快,那么实际显示的是第一次请求的数据,这就会造成数据和我选择的内容不一致的问题。解决的方案:在后续发送请求时,判断之前的请求是否完成(同一个接口),如果未完成则立即取消。然后在发送新的请求。

Axios 介绍

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

Axios 使用 cancel token 取消请求

Axios 的 cancel token API 基于cancelable promises proposal,它还处于第一阶段。

webp

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
 }
 )
 }
}



作者:前端攻城小牛
链接:https://www.jianshu.com/p/d5d3bea46c5c


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
205
获赞与收藏
1008

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消