美文网首页让前端飞前端全栈开发
Axios 如何取消已发送的请求?

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

作者: a333661d6d6e | 来源:发表于2018-10-18 21:53 被阅读10次

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

Axios 介绍

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

相关文章

  • axios如何取消接口请求

    vue项目,如何在axios中取消已经发送的请求呢? 原生js的abort()这个方法 在axios中取消接口请求...

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

    最近遇到一个问题,在连续发送同一请求时,如果第二次请求比第一次请求快,那么实际显示的是第一次请求的数据,这就会造成...

  • axios

    axios axios 是一个专注于网络请求的库! axios 的基本使用:繁 发送get请求: 发送post请求...

  • axios 代理服务器

    npm i axios 下载 import axios from 'axios' 引入 发送请求axios请求 跨...

  • 5.axios框架的基本使用

    axios框架支持多种请求方式向服务器发送请求数据。 tips: axios(config)默认发送的是get请求...

  • vue中发送jsonp请求

    在vue中我们一般都使用axios发送请求,但axios不支持发送jsonp类型的请求。要发送jsonp请求的话需...

  • Action With Axios

    Spring端设置请求@ResponseBody时,Axios如何正确发送请求体? 其他方式均不行 Using a...

  • 前端进阶(2)使用fetch/axios时, 如何取消http请

    前端进阶(2)使用fetch/axios时, 如何取消http请求[https://jackniu81.githu...

  • vue基础知识面试题(二)

    ref获取元素的内容: axios发送get请求: 挂载公共请求头 axios的get请求和post请求:

  • 六、Vue.js

    一、发送AJAX请求 1.简介 2,使用axios发送ajax请求 2.1安装axios并引入 2.1基本用法 3...

网友评论

    本文标题:Axios 如何取消已发送的请求?

    本文链接:https://www.haomeiwen.com/subject/kjfezftx.html