详解Axios 如何取消已发送的请求
2019-01-14 00:03
1801 查看
前言
最近在项目中遇到一个问题,在连续发送同一请求时,如果第二次请求比第一次请求快,那么实际显示的是第一次请求的数据,这就会造成数据和我选择的内容不一致的问题。解决的方案:在后续发送请求时,判断之前的请求是否完成(同一个接口),如果未完成则立即取消。然后在发送新的请求。
Axios 介绍
Axios是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
Axios 使用 cancel token 取消请求
Axios的 cancel token API 基于cancelable promises proposal,它还处于第一阶段。
可以使用 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.');
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 } ) } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- Vue.js实战之使用Vuex + axios发送请求详解
- node作为中间服务层如何发送请求(发送请求的实现方法详解)
- Vue.js实战之使用Vuex + axios发送请求详解
- 【知识整理】Axios-如何发送一个GET请求
- Vue.js实战之使用Vuex + axios发送请求详解
- Ajax详解及其案例分析之如何获得Ajax对象,使用Ajax对象发送GET和POST请求,校验用户名,POST和GET请求时的乱码处理,实现级联的下拉列表
- 详解Vue用axios发送post请求自动set cookie
- javascript如何向服务器发送请求
- 详解iOS AFNetworking取消正在进行的网络请求
- Vue中发送ajax请求——axios使用详解
- PHP如何发送异步请求
- php CURL 发送请求详解
- 详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
- 用axios发送请求获取reponse header中的数据
- 如何使用SOCKET 发送HTTP1.1 GET POST请求包
- 如何让网页面自动发送请求 - 以及 保持原有的文本格式
- 如何使用SOCKET 发送HTTP1.1 GET POST请求包
- 在dva中如何不通过yield发送封装的请求并且获取返回的promise对象中的数据
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- vue2.0项目实战(3)使用axios发送请求