Implement generic cache similar to the spray-caching and cache pattern used by StackOverflow
cache.getSet(key, expensiveExpression).then()
// set if key is null / not existent.
cache.set(key, < promise expression >, < cache options >)
cache.get(key).then()
cache.delete()
Cache can be off an LRU + Expiring nature.
Examples
// Caching multiple inflight requests
cache.getSet('fetch.${something}', () => fetch('blabla')).then()
// Using getSet as a lock
cache.getSet(`processed.${mid}`, () => {
processMessage();
cache.del()
})