Skip to content

Instantly share code, notes, and snippets.

@kolodny
Created November 1, 2018 13:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kolodny/a68280380918450bc04d3046dd50bbbf to your computer and use it in GitHub Desktop.
Save kolodny/a68280380918450bc04d3046dd50bbbf to your computer and use it in GitHub Desktop.
function cache<Query, Result>(
factory: (query: Query) => Observable<Result>,
cache: Map<Query, Result> = new Map()): (query: Query) =>
Observable<Result> {
const subject = new Subject<Result>();
return query => {
if (cache.has(query)) {
subject.next(cache.get(query));
} else {
factory(query).subscribe(results => {
cache.set(query, results);
subject.next(results);
});
}
return subject.asObservable();
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment