import axios, { AxiosRequestConfig } from 'axios'; const timeout = 1000 * 60 * 2, // 默认2分钟超时 method = 'POST'; export const instanceLoading = axios.create({ timeout, method }); export const instance = axios.create({ timeout, method }); /** 调用服务器方法 */ const server = async (config: AxiosRequestConfig, options?: { loading: boolean }) => { try { const res = await (options?.loading ? instanceLoading : instance)(config); if (res.status === 200) { const data = res.data; // 业务返回数据 if (data.status === 200) return data.result; else throw data.message } } catch (error) { throw error } } let _cache: Record = {}; // 缓存数据 /** 等待调用成功后统一返回数据 */ export async function waitServer(cacheKey: string | number | undefined, axiosOptions: AxiosRequestConfig, next: Function) { if (cacheKey) { if (!_cache[cacheKey]) _cache[cacheKey] = { nexts: [] }; if (_cache[cacheKey].inRequest) { if (_cache[cacheKey].data) return next(_cache[cacheKey].data); else return _cache[cacheKey].nexts.push(next); } _cache[cacheKey].inRequest = true; _cache[cacheKey].nexts = [next]; } try { const result = await server(axiosOptions); if (cacheKey) { _cache[cacheKey].nexts.forEach((fn: Function) => fn(result)); _cache[cacheKey].data = result; _cache[cacheKey].nexts = []; } else { next(result) } } catch (error) { if (cacheKey) { _cache[cacheKey].nexts = []; } else { next([]) } } } export default server