@ariva-mds/mds
Version:
Stock market data
48 lines (47 loc) • 1.54 kB
JavaScript
export class LruCache {
constructor(provider, maxEntries) {
this.values = new Map();
this.maxEntries = 200;
this.maxEntries = maxEntries;
this.provider = provider;
}
get(arg0) {
const cacheKey = JSON.stringify(arg0);
const hasKey = this.values.has(cacheKey);
if (hasKey) {
// peek the entry, re-insert for LRU strategy
const entry = this.values.get(cacheKey);
this.values.delete(cacheKey);
if (entry != undefined) {
this.values.set(cacheKey, entry);
return new Promise((resolve, reject) => {
if (entry != undefined) {
resolve(entry);
}
else {
reject("not found");
}
});
}
else {
return new Promise((resolve, reject) => {
reject("some error while looking up");
});
}
}
else {
return this.provider(arg0).then(resolved => {
this.put(cacheKey, resolved);
return resolved;
});
}
}
put(key, value) {
if (this.values.size >= this.maxEntries) {
// least-recently used cache eviction strategy
const keyToDelete = this.values.keys().next().value;
this.values.delete(keyToDelete);
}
this.values.set(key, value);
}
}