用 Map 缓存 API 请求结果需标准化缓存键(如 JSON.stringify 规范化请求参数)、存储 Promise 防止并发重复请求、手动添加时间戳实现过期策略,并提供 clear/delete 方法支持主动清理。

用 JavaScript 的 Map 缓存 API 请求结果,核心是“请求前先查缓存,命中则返回缓存值;未命中则发起请求、存入缓存再返回”。关键在于合理设计缓存键(key)和处理异步、过期、错误等边界情况。
缓存键要能唯一标识请求
不能简单用 URL 当 key,因为相同 URL 可能因参数顺序、空格、编码差异导致不一致。推荐对请求配置做标准化序列化:
- 将
url、method、headers(只取影响结果的,如Authorization)、body(GET 无 body,POST 需 JSON.stringify 并排序键名)统一转为规范字符串 - 例如:
JSON.stringify({ url, method, params: sortObj(params) }),其中sortObj确保对象属性顺序固定 - 避免用原始对象或函数作 key——
Map中 key 是按引用比较的,每次新建对象都算新 key
缓存值存 Promise 而非最终数据
防止同一请求在缓存未命中瞬间被并发触发多次(即“缓存击穿”):
- 首次请求时,把
fetch(...)返回的 Promise 存入 Map - 后续相同请求直接复用这个 Promise,自然共享同一响应结果
- 示例:
cache.set(key, fetch(url).then(res => res.json())) - 这样即使 5 个组件同时调用,也只发 1 次请求,其余 await 同一个 Promise
支持简单过期与手动清理
Map 本身无自动过期机制,需自行增强:
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
- 存值时附带时间戳:
cache.set(key, { promise, timestamp: Date.now() }) - 读取前检查是否超时(如 5 分钟):
if (Date.now() - entry.timestamp > 5 * 60 * 1000) { cache.delete(key); return null; } - 提供
clear()或delete(key)方法,方便登录态变更、数据更新后主动清缓存
封装成可复用的请求函数
把逻辑收拢,对外暴露简洁接口:
示例代码片段:HTTP ${res.status}
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










