feat: 添加基金历史净值趋势图表功能
This commit is contained in:
52
app/lib/cacheRequest.js
Normal file
52
app/lib/cacheRequest.js
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
const _cacheResultMap = new Map();
|
||||
const _cachePendingPromiseMap = new Map();
|
||||
|
||||
/**
|
||||
* 对函数式写法的请求进行缓存
|
||||
* @param request
|
||||
* @param cacheKey
|
||||
* @param options
|
||||
*/
|
||||
export async function cachedRequest(
|
||||
request,
|
||||
cacheKey,
|
||||
options
|
||||
) {
|
||||
const {
|
||||
cacheResultMap = _cacheResultMap,
|
||||
cachePendingPromiseMap = _cachePendingPromiseMap,
|
||||
cacheTime = 1000 * 10,
|
||||
} = options ?? {};
|
||||
let result;
|
||||
// 如果有缓存直接返回
|
||||
if (cacheResultMap.has(cacheKey)) {
|
||||
result = cacheResultMap.get(cacheKey);
|
||||
} else if (cachePendingPromiseMap.has(cacheKey)) {
|
||||
// 如果没有缓存,需要判断是否存在相同正在发起的请求
|
||||
result = await cachePendingPromiseMap.get(cacheKey);
|
||||
} else {
|
||||
// 发起真实请求
|
||||
cachePendingPromiseMap.set(cacheKey, request());
|
||||
result = await cachePendingPromiseMap.get(cacheKey);
|
||||
cacheResultMap.set(cacheKey, result);
|
||||
// 设置清除缓存时间
|
||||
if (cacheTime > 0) {
|
||||
setTimeout(() => {
|
||||
cacheResultMap.delete(cacheKey);
|
||||
}, cacheTime);
|
||||
}
|
||||
// 得到请求结果后 清理请求
|
||||
cachePendingPromiseMap.delete(cacheKey);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除缓存的请求结果
|
||||
* @param key
|
||||
*/
|
||||
export function clearCachedRequest(key) {
|
||||
_cacheResultMap.delete(key);
|
||||
_cachePendingPromiseMap.delete(key);
|
||||
}
|
||||
Reference in New Issue
Block a user