当前位置: 首页 > article >正文

取消请求:axios.

axios.CancelToken和isCancel

    1. cancelToken的作用是获取取消函数,用来手动取消接口。
    1. axios.isCancel的作用是在处理错误的时候判断当前错误,是否是由于取消导致的。

使用方式1

  const testFun = async () => {
    let cancel: any; // 保存取消函数
    // 发送请求,配置 cancelToken
    axios
      .get('/api/authorization/initData1', {
        cancelToken: new axios.CancelToken(function executor(c) {
          cancel = c; // 将取消函数赋值给外部变量
        }),
      })
      .catch((err) => {
        if (axios.isCancel(err)) {
          console.log('请求已取消!', err);
        } else {
          console.log('其他错误!', err);
        }
      });

    // 取消请求
    cancel('请求被终止11');
  };

如下图,这个接口就被cancel了
在这里插入图片描述

使用方式2

const axios = require('axios');

// 创建 CancelToken 的 source 对象
const source = axios.CancelToken.source();

// 发送请求,配置 cancelToken
axios.get('/api/data', {
  cancelToken: source.token
})
  .then(response => console.log(response))
  .catch(error => {
    if (axios.isCancel(error)) {
      console.log('请求已取消:', error.message);
    } else {
      // 处理其他错误
    }
  });

// 取消请求(可传入提示信息)
source.cancel('用户取消了请求');

AbortController

浏览器的原生api。所有的请求库都能使用这个方法。所有浏览器都支持。

    1. AbortController 的实例 用来绑定到anxios的signal 上。
    1. controller.abort触发请求。
    1. error.name === ‘CanceledError’。检查是否取消类型的错误
  const testFun1 = async () => {
    const controller = new AbortController();
    axios
      .get('/api/authorization/initData', {
        signal: controller.signal, // 绑定 AbortSignal
      })
      .then((response) => console.log(response))
      .catch((error) => {
        if (error.name === 'CanceledError') {
          // 检查是否取消
          console.log('请求已取消!', error);
        } else {
          console.error('其他错误:', error);
        }
      });

    // 触发取消
    controller.abort('这是一次手动取消');
  };

兼容性: 所有现代浏览器均支持 AbortController,IE 需 polyfill。
错误传播: 取消的请求会进入 .catch(),需明确区分取消和其他错误。
不可重复使用: 一个 AbortController 只能取消一次,如需多次取消需创建新实例。

二者对比

在这里插入图片描述


http://www.kler.cn/a/572567.html

相关文章:

  • 数据结构篇—队列(queue)
  • Windows 11 + Ubuntu 22.04双系统时间同步失败处理
  • 为AI聊天工具添加一个知识系统 之135 详细设计之76 通用编程语言 之6
  • A*算法路径规划_MATLAB实现
  • 十一、Redis Sentinel(哨兵)—— 高可用架构与配置指南
  • 【多模态目标检测】M2FNet:基于可见光与热红外图像的多模态融合目标检测网络
  • 【Linux】自定协议和序列化与反序列化
  • 新版 FMEA 七步法 - PFMEA 第2步“结构分析”的关键要点 | FMEA软件
  • 快速排序:深入解析算法核心与性能密码
  • LIUNX学习-线程
  • DeepSeek 各版本的区别
  • android App主题颜色动态更换
  • git配置SSH公钥
  • Click Event Simulation:无需浏览器触发动态数据加载
  • 学习记录-用例设计编写
  • iOS安全和逆向系列教程 第16篇:Frida入门与高级应用
  • 【ESP-ADF】在 VSCode 安装 ESP-ADF 注意事项
  • 腾讯云物联网平台(IoT Explorer)设备端使用
  • Java中Date转LocalDateTime
  • 人机交互进化论:解码智能手机81种交互方式背后的用户体验革命