axios请求缓存

目的

避免重复请求,提升运行效率,适用于获取对实时性要求不高的数据。

实现思路

具体实现

js 复制代码
import { getKey } from './createKey'
import axios from 'axios'

const cache = new Map()
const pendingRequests = new Map()

//缓存请求数据 使用请求锁 防止并发 减少重复请求,复用已有的结果,提升响应速度
export const cacheRequestData = function (config, cacheTime = 60000) {
  const key = getKey(config)
  if (!key) {
    // 无效 key,直接请求,不缓存
    return axios(config).then((res) => res.data)
  }

  const cached = cache.get(key)
  if (cached && cached.expireTime > Date.now()) {
    return Promise.resolve(cached.data)
  }

  if (pendingRequests.has(key)) {
    return pendingRequests.get(key)
  }

  const requestPromise = axios(config)
    .then((res) => {
      const expireTime = Date.now() + cacheTime
      cache.set(key, { expireTime, data: res.data })
      return res.data
    })
    .finally(() => {
      pendingRequests.delete(key)
    })

  pendingRequests.set(key, requestPromise)
  return requestPromise
}
相关推荐
风骏时光牛马12 分钟前
测试标题001
前端
IT_陈寒39 分钟前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记1 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
计算机魔术师1 小时前
半年前说不缺钱,半年后150亿美元超募
前端
用户5708462574401 小时前
自动化发布器里最贵的 Bug:返回成功,但什么都没发生
前端
爱吃馒头不吃辣1 小时前
加一道题,改一天代码:题库即数据的降维打击
前端·架构
aiks_yuan1 小时前
Requestly规则使用技巧:前端联调、接口Mock与网络请求调试实战
前端
程序员老赵1 小时前
Docker 部署 MaxKB:轻松搭建企业级智能体平台
前端·docker·agent
踩蚂蚁1 小时前
输入关键词到离线模型:从 Wake Word 到多关键词 KWS 的一条工程链路
前端