修身养性,知行合一

  • 首页
  • 爱码
    • 系统
    • 数据库
    • JavaScript
    • CSharp
    • Python
  • 生活
    • 文化
    • 美食
  • 杂谈
  • 关于
修身养性,知行合一
码字,杂谈
  1. 首页
  2. 爱码
  3. 前端
  4. JavaScript
  5. 正文

请求的取消

2025年1月21日 1424点热度 0人点赞 0条评论

有时在多次请求情况下,会出现请求和结果表现的不一样。这种情况大多是因为网络传输速度导致,因为请求并不是先进先出,如图效果:

file

我们希望的是这样:

file

此时需要抛弃掉前置请求,直接相应最新的一个。这时就用到 CancelToken 机制,当调用这个 token 的时候,系统会知道当前这个请求已经没用了,浏览器会取消继续请求,直接抛弃

// 以 axios 为例,本例中默认已经配置好 axios,直接使用
import axios from 'axios';

const CancelToken = axios.CancelToken;
let cancel;

const request = axios({
  // ...
});

function fetchData() {
  // cancel 存在则取消前一个
  if (cancel) cancel('Request canceled');

  // 发起请求
  request.get('/url', {
    cancelToken: new CancelToken(c => (cancel = c));
  }).then(res => {
    console.log('response', res);
  }).catch(err => {
    if (axios.isCancel(error)) {
      console.log('request canceled', error.message);
    } else {
      console.error('Error', error)
    }
  })
}

// 调用
fetchData(); // 第一次请求
fetchData(); // 第二次请求。如果本地请求时,第一次请求还未返回结果,则会取消第一次的请求,在浏览器中可以看到请求状态被 cancel

当我们重复请求时,系统会自行取消,并且我们在控制台可以看到如下内容:

file

此时,对应的之前的请求已经是取消状态。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JavaScript
最后更新:2025年1月21日

jeremyjone

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

最新 热点 随机
最新 热点 随机
node-sass 的安装 解决端口被占的问题 vue3 组件 Props 的声明方式 给 div 添加选中状态 请求的取消 rgb 颜色小数兼容问题
node-sass 的安装
fetch的二次封装 手撸了一个基于Vue的Gantt组件 element-plus 表格在固定列时滚动条莫名奇妙显示 Vim使用指南 关于 vue3 的 onMounted 获取不到 ref vue2 中 vuex 对 ts 的支持

(っ•̀ω•́)っ✎⁾⁾ 开心每一天

COPYRIGHT © 2021 jeremyjone.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

京ICP备19012859号-1

京公网安备 11010802028585号