【vue3】中断请求、取消请求

一、需求说明

前端调请求接口过程中,主动取消请求

二、流程说明

三、解决方法

1、api文件:封装的接口

javascript 复制代码
import http from "../../http/fetch";
export default {
  /**
   * @description: 请求接口
   * @param {*} data 所需参数
   * @param {CancelToken} [cancelToken] 取消令牌
   * @return {*}
   */
  handleQq(data: any, cancelToken: any) {
    return http({
      url: "/aaa/completions",
      method: "post",
      data: data,
      cancelToken: cancelToken
    });
  },
};

2、vue文件:页面 +js方法

javascript 复制代码
<a-modal
    v-model:visible="resultData.visible"
    :closable="false"
    :maskClosable="false"
    :footer="null"
    :header="null"
    centered
    :width="280"
    :getContainer="() => $refs.modalStyle"
>
        <img src="../assets/images/lod.gif" alt="" class="gif" />
        <div class="mod">请求中,请稍后...</div>
        <div class="tow" @click="deleteOk">取消请求</div>
</a-modal>

1、添加一个cancelTokenSource,创建一个取消令牌源

2、请求完后清空取消令牌源

3、通过cancel()方法取消请求了

javascript 复制代码
import http from "@/api文件路径";
const { handleQq } = http;
import axios from "axios";

// 创建取消控制器
let resultData = reactive({
    visible:false,// 请求中的标识弹窗,有一个可以点击取消请求按钮
    tokenSource: { cancelTokenSource: null as null | any }
})

/**
 * @description: 调用接口
 * @return {*}
 */
const handleWit = async () => {
    resultData.visible = true;
      resultData.tokenSource.cancelTokenSource = axios.CancelToken.source(); // 添加一个cancelTokenSource,创建一个取消令牌源
    let parm = { model: "deepseek" };
    const { data } = await handleQq(parm, resultData.tokenSource.cancelTokenSource.token);
    if (data) {
        console.log("请求成功")
    } else {
      message.warning("请求失败");
    }
    resultData.visible = false;
  resultData.tokenSource.cancelTokenSource = null; // 请求完后清空取消令牌源
};

/**
 * @description: 取消请求
 * @return {*}
 */
const deleteOk = () => {
  resultData.visible = false;
  if (resultData.tokenSource.cancelTokenSource) {
    resultData.tokenSource.cancelTokenSource.cancel("用户取消识别"); // 通过cancel()方法就可以取消请求了
  }
};

四、参考链接

vue3中怎么中断正在请求的接口,取消请求-CSDN博客

vue如何中断请求 • Worktile社区

相关推荐
阿懂在掘金18 分钟前
defineModel 是进步还是边界陷阱?双数据源组件的选择逻辑
vue.js·源码阅读
核以解忧18 分钟前
借助VTable Skill实现10W+数据渲染
前端
WangHappy21 分钟前
不写 Canvas 也能搞定!小程序图片导出的 WebView 通信方案
前端·微信小程序
李剑一25 分钟前
要闹哪样?又出现了一款新的格式化插件,尤雨溪力荐,速度提升了惊人的45倍!
前端·vue.js
闲云一鹤33 分钟前
Git LFS 扫盲教程 - 你不会还在用 Git 管理大文件吧?
前端·git·前端工程化
阿虎儿1 小时前
React Context 详解:从入门到性能优化
前端·vue.js·react.js
颜酱2 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
Sailing2 小时前
🚀 别再乱写 16px 了!CSS 单位体系已经进入“计算时代”,真正的响应式布局
前端·css·面试
FansUnion2 小时前
我如何用 Next.js + Supabase + Cloudflare R2 搭建壁纸销售平台——月成本接近 $0
javascript
喝水的长颈鹿2 小时前
【大白话前端 03】Web 标准与最佳实践
前端