lion/packages/providence-analytics/src/program/utils/memoize.js

34 lines
852 B
JavaScript

function memoize(func, externalStorage) {
const storage = externalStorage || {};
// eslint-disable-next-line func-names
return function () {
// eslint-disable-next-line prefer-rest-params
const args = [...arguments];
if (args in storage) {
return storage[args];
}
const outcome = func.apply(this, args);
storage[args] = outcome;
return outcome;
};
}
function memoizeAsync(func, externalStorage) {
const storage = externalStorage || {};
// eslint-disable-next-line func-names
return async function () {
// eslint-disable-next-line prefer-rest-params
const args = [...arguments];
if (args in storage) {
return storage[args];
}
const outcome = await func.apply(this, args);
storage[args] = outcome;
return outcome;
};
}
module.exports = {
memoize,
memoizeAsync,
};