umi4 中断请求

umi4 中断请求

主要是利用 axios 的 CancelToken。

app.ts

import type { RequestConfig } from "@umijs/max";

// 全局用于存放请求
let pending: any[] = [];

// 执行中断请求,以及移除中断请求
const removePending = (config: any, pending: any[] = []) => {
  for (const index in pending) {
    let curIndex = Number(index);
    // 当当前请求的信息在pending存在,即需求执行中断请求
    if (pending[curIndex].u === `${config.url}&${config.method}`) {
      // 当当前请求在数组中存在时执行函数体
      pending[curIndex].f("请求中断"); // 执行取消操作
      pending.splice(curIndex, 1); // 把这条记录从数组中移除
    }
  }
};

export const request: RequestConfig = {
  // 请求拦截
  requestInterceptors: [
    // 一个二元组,第一个元素是 request 拦截器,第二个元素是错误处理
    [
      (url, options: any) => {
        removePending(options, pending);
        options.cancelToken = new CancelToken((c) => {
          // u属性确定值唯一
          pending.push({ u: `${options.url}&${options.method}`, f: c });
        });
        return { url, options };
      },
      (error) => {
        return Promise.reject(error);
      },
    ],
  ],
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值