Axios封装及请求防抖

28,634次阅读
没有评论

共计 1806 个字符,预计需要花费 5 分钟才能阅读完成。

//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
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计1806字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)