前端中的接口聚合

request-combo是一个前端接口聚合模块,用于合并相同接口的不同参数请求,避免重复请求。核心逻辑包括接口队列管理、缓存机制及条件触发请求。通过requestCombo()方法调用,提供接口聚合功能,并支持参数、回调函数等定制。
摘要由CSDN通过智能技术生成

request-combo

这是一个前端简易版接口聚合模块,主要用于以下场景:

一个支持参数合并的接口,在组件化或其他场景下调用了不同参数的相同的接口,这时把这些调用合并成一个或多个接口再请求。
避免发起相同的请求,某些情况下发起了相同的请求,经收集处理后,实际只发起一个请求。但是不同的发起端的callback 都能得到处理。
主要逻辑设计

要知道接口的基本信息,包括但不限于 url、params、callback…
既然要聚合,那么得有一个收集接口的队列
每个接口的队列要有状态,当一个新接口到来时,该接口的队列可能还没创建,可能正在收集,可能刚发完请求。
要有接口队列发起请求的条件,收集时间够了或者收集长度够了…
有缓存机制,已获取的数据暂时缓存起来
API 设计

调用方法:requestCombo() 参数:

apiData: ApiData,
params: object,
callback: Function,
request = axios,
collectTime = 100,
isCombo = true,
errorHandle?: Function
复制代码
ApiData 类型中包含以下内容:

params Description Type Example url 接口地址 string http:xxx/api pack 参数合并逻辑函数 function fn unpack 数据拆解逻辑函数 function fn maxComboNum 接口最大收集次数 number 10 requestMethod 当前请求类型 string ‘get’ 具体实现

import axios from ‘axios’;
interface ApiData {
url: string;
pack: Function;
unpack: Function;
maxComboNum?: number;
requestMethod?: string;
}
/**

  • status: number
  • 0:init
  • 1:pending
  • 2:done
  • request
  • The api must be the same as axios
    */
    const dataCache: object = {};
    const busData: object = {};
    export const requestCombo = (apiData: ApiData, params: object, callback?: Function, request = axios, collectTime = 100, isCombo = true, errorHandle?: Function) => {
    const { url, requestMethod = ‘get’, maxComboNum = 10, pack, unpack } = apiData;
    const method: string = requestMethod.toLocaleLowerCase();
    const cacheKey = ${url}_${method}_${JSON.stringify(params)};
    const busKey = ${url}_${method};
    if (!url) return;
    const sendRequest = async () =
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值