UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

36 lines (35 loc) 991 B
import { MISS } from '../types.js'; import { jsonMemoSerializer, MapMemoCache } from './memo.util.js'; /** * @experimental */ export function _memoFnAsync(fn, opt) { const { logger = console, cacheFactory = () => new MapMemoCache(), cacheKeyFn = jsonMemoSerializer, } = opt; const cache = cacheFactory(); const memoizedFn = async function (...args) { const ctx = this; const cacheKey = cacheKeyFn(args); let value; try { value = await cache.get(cacheKey); } catch (err) { logger.error(err); } if (value !== MISS) { return value; } value = await fn.apply(ctx, args); void (async () => { try { await cache.set(cacheKey, value); } catch (err) { logger.error(err); } })(); return value; }; Object.assign(memoizedFn, { cache }); return memoizedFn; }