封装axiso请求防抖

//request.js文件中
import axios from "axios";
//import些你需要的插件或者数据...
let requests=[];//请求防抖需要收集请求中的集合,并控制过滤

/****** 创建axios实例 ******/
const service = axios.create({
  baseURL: process.env.BASE_URL, // 接口基础路径
  timeout: 5000  // 请求超时时间
  // transformResponse 允许自定义原始的响应数据(字符串)
  transformResponse: [function (data) {
    try {// 如果转换成功则返回转换的数据结果return JSON.parse(data)
    } catch (err) {// 如果转换失败,则包装为统一数据格式并返回return data}
  }]
})


/****** request拦截器==>对请求参数做处理 ******/
service.interceptors.request.use(async config => {
    
     // 阻止重复请求。当上个请求未完成时,相同的请求不会进行
    let flag = await stopRepeatRequest(requests, config.url, `${config.url} 请求重复`)
    if (flag) {return}
    if (!config.method) {config.method = "get";}//设置默认请求方式
    try {setConfig(config);} catch (error) {console.error(error);}//预设请求头
    //...此处可以考虑添加一些请求loading样式或者什么的
    return config;
}, error => {//请求错误处理,如结束loading什么的操作等 Promise.reject(error)})
    
    

/****** respone拦截器==>对响应做处理 ******/
service.interceptors.response.use(
    response => {  //成功请求到数据
        //这里根据后端提供的数据进行对应的处理等
        allowRequest(requests, response.config.url)//过滤掉已结束的请求
         if (code === "-9000") {//前后端约定的一些返回处理}
        return response.data;
    },
    error => {  //响应错误处理
       allowRequest(requests, response.config.url)//过滤掉已结束的请求
        if (code === "-9000") {//前后端约定的一些返回处理}
        return Promise.reject(error)
    }
);
// 拦截request,设置全局请求为ajax请求
function setConfig(config, fetch) {
    let headers = {};
    // 用户登录后获取的token
    headers["token"] = config.headers["token"] = electronStore.get("token") || "";
   //预设更多的请求头....
    if (fetch) {
        return headers;
    }
}
//请求中的URL集合
function stopRepeatRequest(reqList, url, errorMessage) {
    if (url.indexOf('upload/uploadChunkFile') != -1 || url.indexOf('api/chat/getUserHistoryMsgs') != -1 || url.indexOf('api/chat/ackUserOffLineMsgs') != -1) {
        return false
    }
    if (reqList.length) {
       let arr= reqList.filter(item=>item==url)
        if(arr.length){
            console.log(errorMessage,49)
            return  true
        }
    }
    reqList.push(url)
}
//单个请求结束后的URL
function allowRequest (reqList, url) {
    if (reqList.length) {
        requests=reqList.filter(item=>item!=url)
    }
};
export default service;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值