123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- type Timer = ReturnType<typeof setTimeout>;
- type CachedKey = string | number;
- export interface CachedData<TData = any, TParams = any> {
- data: TData;
- params: TParams;
- time: number;
- }
- interface RecordData extends CachedData {
- timer: Timer | undefined;
- }
- const cache = new Map<CachedKey, RecordData>();
- export const setCache = (key: CachedKey, cacheTime: number, cachedData: CachedData) => {
- const currentCache = cache.get(key);
- if (currentCache?.timer) {
- clearTimeout(currentCache.timer);
- }
- let timer: Timer | undefined = undefined;
- if (cacheTime > -1) {
- // if cache out, clear it
- timer = setTimeout(() => {
- cache.delete(key);
- }, cacheTime);
- }
- cache.set(key, {
- ...cachedData,
- timer,
- });
- };
- export const getCache = (key: CachedKey) => {
- return cache.get(key);
- };
- export const clearCache = (key?: string | string[]) => {
- if (key) {
- const cacheKeys = Array.isArray(key) ? key : [key];
- cacheKeys.forEach((cacheKey) => cache.delete(cacheKey));
- } else {
- cache.clear();
- }
- };
|