记住函数的计算结果,提高函数计算的性能
/**
* 缓存函数
* @param fn
*/
interface Cache {
[propName: string]: any
}
interface FN {
(arg: string): any
}
export const memoized = (fn: FN) => {
// 缓存求值 如果有则取缓存 如果没有则赋值
const cache: Cache = {};
return function memoiz<fnType>(arg: string): any {
return cache[arg] || (cache[arg] = fn(arg));
};
};
const square = <fnType>(n) => {
if (!n) return 1;
return n * square(--n)
};
const memoizedSquare = memoized(square);
memoizedSquare(5);
异步缓存求值
/**
* 异步缓存求值
* @param fn
*/
interface AsyncFN {
(arg: string): Promise<any>
}
export const asyncMemoized = (fn: AsyncFN) => {
// 缓存求值 如果有则取缓存 如果没有则赋值
const cache: Cache = {};
return async function memoiz<fnType>(arg: string): Promise<any> {
cache[arg] || (cache[arg] = await fn(arg));
return [cache[arg], cache];
};
};