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
}
相关推荐
全栈技术负责人9 小时前
AI 效能工具建设:Agent 可观测性技能技术方案与实践
前端·ai·ai编程
梦想平凡10 小时前
百游棋牌源代码开发搭建教程(一):全端工程结构、开发环境配置与首次启动验证
前端·javascript·源代码管理
妙码生花10 小时前
两个月 59 篇 AI 开发日志 + Golang 商业级实战项目收工后,得来的 AI 使用心法-上
前端·后端·gin
vx-Biye_Design10 小时前
springboot中国传统节日宣传平台49078-计算机课程设计、毕业设计
java·前端·vue.js·spring boot·后端·课程设计·idea
妙码生花10 小时前
两个月 59 篇 AI 开发日志 + Golang 商业级实战项目收工后,得来的 AI 使用心法-下
前端·后端·go
计算机魔术师11 小时前
Beren Millidge、John Schulman、Charlie O'Neill 对谈递归自我改进离我们还有多远
前端
MetaLite11 小时前
Java 时间处理的两个坑:单位误判,半秒算成一秒
java·开发语言·前端
hiahiahia12311 小时前
SSE 到底是什么?
前端·人工智能
Bigger11 小时前
我把苹果发布会里的折叠屏,真的用网页做出来了
前端·ai编程·交互设计
钱栈up12 小时前
qoder CLI 1.0.45 本地小说生成工作流搭建:Feature Gate 配置与长文本断连排查从死锁到全流程跑通:Python德州扑克项目的优化
java·前端·数据库