nq-cache
Version:
function cache
34 lines (30 loc) • 1.09 kB
JavaScript
import store from './store';
import { argToKey } from '../utils/assist';
/**
* 异步的结果缓存在内存中,下次调用直接使用缓存数据
* @param {Function} fn - 纯函数
* @returns {Function} 和原函数的调用方式是一样的,第一次调用数据缓存后,之后的调用不会调用原函数,而是会直接使用缓存后的数据,另外该函数还带有一个静态的clearCache方法,可以用来清空缓存数据
* @property {Function} clearCache 清空缓存数据
*/
export default function promiseCache(fn) {
let cache = {};
const cachedFn = function cachedFn(...arg) {
let key = argToKey(...arg);
return cache.hasOwnProperty(key) ? Promise.resolve(cache[key]) : fn(...arg).then(res => {
cache[key] = res;
return Promise.resolve(res);
});
};
cachedFn.clearCache = function (key) {
if (key) {
delete cache[key];
} else {
cache = {};
}
};
cachedFn.funType = 'promise';
cachedFn.cacheType = 'memory';
cachedFn.originFunName = fn.name;
store.push(cachedFn);
return cachedFn;
}