@croct/cache
Version:
An abstraction layer for caching.
26 lines (25 loc) • 905 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultWhileMissCache = void 0;
class DefaultWhileMissCache {
constructor(config) {
this.provider = config.provider;
this.defaultValue = config.defaultValue;
this.errorHandler = config.errorHandler ?? (() => { });
}
get(key, loader) {
return this.provider.get(key, innerKey => {
// Schedule loading in the next tick avoiding resolving
// before the surrounding cache retrieval resolves
setImmediate(() => loader(innerKey).catch(error => this.errorHandler(key, error)));
return Promise.resolve(this.defaultValue);
});
}
set(key, value) {
return this.provider.set(key, value);
}
delete(key) {
return this.provider.delete(key);
}
}
exports.DefaultWhileMissCache = DefaultWhileMissCache;