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
}
相关推荐
当时只道寻常14 小时前
Vue3 + IntersectionObserver 实现高性能图片懒加载
前端
sakiko_14 小时前
UIKit学习笔记3-布局、滚动视图、隐藏或显示视图
前端·笔记·学习·objective-c·swift·uikit
有一个好名字15 小时前
Agent Loop —— 一切从那个 while 循环开始
前端·javascript·chrome
一天睡25小时15 小时前
Claude Code 指令入门教程
前端
yingyima15 小时前
正则表达式实战:从日志中精准提取关键字段
前端
TeamDev15 小时前
如何在 DotNetBrowser 中使用本地 AI 模型
前端·后端·.net
谢尔登16 小时前
10_从 React Hooks 本质看 useState
前端·ubuntu·react.js
辰同学ovo16 小时前
从全局登录状态管理学习 Redux
前端·javascript·学习·react.js
陈随易16 小时前
2年没用Nodejs了,Bun很香
前端·后端·程序员
donecoding16 小时前
Corepack 完全解析:从懵到懂,包管理器自由了
前端·node.js·前端工程化