axios 手动中断请求

image.png
方案一:使用 AbortController(推荐,Axios >= 0.22.0),AbortController 是浏览器原生 API,可通过 signal 控制请求的终止。
<template>
    <el-button @click="send">发送请求</el-button>
    <el-button @click="stop">终止请求</el-button>
</template>
<script setup >
const controller = ref(new AbortController());
import {getMsgList} from '@/api/list/index.js';
function send() {
  getList();
}
function stop() {
   controller.value.abort(); // 终止请求
  controller.value = new AbortController(); // 重置控制器(可选)
}
function getList() {
  getMsgList(queryParams.value,  controller.value.signal).then((response) => {
  }) .catch((error) => {
      // 检查是否是 AbortController 触发的取消
      if (error.name === 'CanceledError') {
        proxy.$modal.msgError('用户主动取消了请求');
      }
    });;
}
</script>
//getMsgList.js
export function getMsgList(query, token) {
  return request({
    url: '/api/list',
    method: 'get',
    params: query,
     signal:signal
  });
}
//在组件卸载时(onUnmounted 钩子)取消未完成的请求,防止内存泄漏:
onUnmounted(() => {
  stop();
});
方法 2:使用 CancelToken(旧版 Axios < 0.22.0),Axios 早期版本通过 CancelToken 实现请求取消。
<template>
    <el-button @click="send">发送请求</el-button>
    <el-button @click="stop">终止请求</el-button>
</template>
<script setup >
import axios from 'axios';
let axiosSource = axios.CancelToken.source();
import {getMsgList} from '@/api/list/index.js';
function send() {
//发送请求前,需要重新生成CancelToken.source,
//不然再也无法从该 URL 获得成功的响应,
//因为同一个CancelToken.source都会被取消请求,
//所以在重新请求前,需要重新生成一个CancelToken.source
  axiosSource = axios.CancelToken.source();
  getList();
}

function stop() {
  axiosSource.cancel('取消请求');
}

function getList() {
  getMsgList(queryParams.value, axiosSource.token).then((response) => {
  });
}
</script>
//getMsgList.js
export function getMsgList(query, token) {
  return request({
    url: '/api/list',
    method: 'get',
    params: query,
    cancelToken: token
  });
}
//在组件卸载时(onUnmounted 钩子)取消未完成的请求,防止内存泄漏:
onUnmounted(() => {
  stop();
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容