防止重复请求的策略
在前端开发中,用户可能会多次点击按钮或触发同一请求,导致重复请求和冗余数据。通过 Axios 可以采用多种策略防止重复请求。
1. 使用请求标识和拦截器
import axios from "axios";
const pendingRequests = new Map();
// 添加请求拦截器
axios.interceptors.request.use((config) => {
const key = `${config.method}:${config.url}`;
if (pendingRequests.has(key)) {
// 取消重复请求
return Promise.reject(new Error("重复请求已取消"));
}
pendingRequests.set(key, true);
return config;
});
// 添加响应拦截器
axios.interceptors.response.use(
(response) => {
const key = `${response.config.method}:${response.config.url}`;
pendingRequests.delete(key);
return response;
},
(error) => {
if (error.config) {
const key = `${error.config.method}:${error.config.url}`;
pendingRequests.delete(key);
}
return Promise.reject(error);
}
);
2. 使用防抖 / 节流机制
import { debounce } from "lodash";
import axios from "axios";
const fetchData = debounce(() => {
axios
.get("/search?q=keyword")
.then((res) => console.log(res.data))
.catch((err) => console.error(err));
}, 300);
// 用户快速触发搜索时,只有最后一次请求会发送
document.getElementById("searchBtn").addEventListener("click", fetchData);
3. 优势
- 减少冗余请求:防止接口被重复调用;
- 提升性能:降低服务器压力,减少网络消耗;
- 改善用户体验:避免界面显示过时或重复数据。
💡 小提示:防止重复请求的策略适合搜索、表单提交、按钮点击等场景,结合拦截器和防抖/节流机制效果最佳。
相关内容
- 缓存与重复请求优化 本章节介绍如何在前端项目中使用 Axios 优化请求缓存与防止重复请求,包括浏览器缓存、内存缓存、请求去重策略、拦截器结合缓存、缓存过期处理等方法,帮助提高接口...
- 前端容错与兜底策略 本章节讲解如何在前端使用 Axios 实现容错与兜底策略,包括请求失败处理、默认数据返回、全局错误提示、降级方案、备用接口调用等方法,确保应用在网络异常或接口异...
- 接口统一管理与类型定义 本章节介绍如何在前端项目中使用 Axios 统一管理接口请求,包括接口模块化、统一封装、请求类型定义、TypeScript 类型约束、接口文档维护及调用规范化。...
- 取消请求(CancelToken 与 AbortController) 本章节讲解如何在 Axios 中取消请求,包括使用 CancelToken 和 AbortController 两种方式,适用于用户快速切换页面或重复请求时,防...
- 同时发送多个请求(axios.all / axios.spread) 本章节讲解如何使用 Axios 同时发送多个请求,包括 axios.all 和 axios.spread 的使用方法,帮助前端项目高效处理并发请求,提高数据获取...
- 大文件分片上传实战 本章节讲解如何使用 Axios 实现大文件分片上传,包括将文件拆分成小块、逐片上传、合并服务端和上传进度管理,适用于上传大文件时提高成功率和用户体验。