@naturalcycles/js-lib
Version:
Standard library for universal (browser + Node.js) javascript
39 lines (38 loc) • 1.11 kB
JavaScript
;
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;
}