UNPKG

@naturalcycles/js-lib

Version:

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

39 lines (38 loc) 1.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._memoFnAsync = _memoFnAsync; const types_1 = require("../types"); const memo_util_1 = require("./memo.util"); /** * @experimental */ function _memoFnAsync(fn, opt) { const { logger = console, cacheFactory = () => new memo_util_1.MapMemoCache(), cacheKeyFn = memo_util_1.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 !== types_1.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; }