可以在封装的 Axios 中设置方法来防止 HTTP 的重复请求。一种常见的方法是通过设置一个标识符,在发送请求前检查该标识符,如果之前已经有相同的请求正在进行,则取消当前请求或者等待上一个请求完成后再发送新请求。这种方式可以有效地避免重复请求的问题。
以下是一个简单的示例代码,演示如何在封装的 Axios 中实现防止重复请求:
import axios from 'axios';// 创建一个用于存储请求标识符的变量
let pendingRequests = {};const instance = axios.create({// 配置axios实例
});instance.interceptors.request.use(function (config) {// 生成唯一标识符const requestId = config.url + JSON.stringify(config.params);// 如果该请求已存在,则取消当前请求if (pendingRequests[requestId]) {config.cancelToken = new axios.CancelToken(cancel => {cancel('Duplicate request detected');});} else {// 否则将请求标识符记录下来pendingRequests[requestId] = true;}return config;
}, function (error) {return Promise.reject(error);
});instance.interceptors.response.use(function (response) {// 在请求结束时移除该请求的标识符const requestId = response.config.url + JSON.stringify(response.config.params);delete pendingRequests[requestId];return response;
}, function (error) {return Promise.reject(error);
});export default instance;
在这个示例中,通过拦截器在发送请求前检查请求标识符,如果已经存在相同的请求标识符,则取消当前请求;在请求结束后再删除该请求标识符。这样可以确保同一请求不会被同时发起多次。当然,具体的实现方式还可以根据项目的需求和复杂度进行调整和扩展。