UNPKG

@ariva-mds/mds

Version:

Stock market data

48 lines (47 loc) 1.54 kB
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); } }