Add timed cache to user count queries

This commit is contained in:
Berkeley Martinez
2016-04-05 14:45:09 -07:00
parent c57f1b6f9a
commit 06ea132257
3 changed files with 39 additions and 24 deletions

View File

@@ -1,4 +1,5 @@
import Rx from 'rx';
import Rx, { AsyncSubject, Observable } from 'rx';
import moment from 'moment';
import debugFactory from 'debug';
const debug = debugFactory('fcc:rxUtils');
@@ -31,3 +32,22 @@ export function observeQuery(Model, method, query) {
export function observeMethod(context, methodName) {
return Rx.Observable.fromNodeCallback(context[methodName], context);
}
// timeChache(amount: Number, unit: String) => Observable
export function timeCache(time, unit) {
const source = this;
let cache;
let expireCacheAt;
return Observable.create(observable => {
// if there is no expire time set
// or if expireCacheAt is smaller than now,
// set new expire time in MS and create new subscription to source
if (!expireCacheAt || expireCacheAt < Date.now()) {
// set expire in ms;
expireCacheAt = moment().add(time, unit).valueOf();
cache = new AsyncSubject();
source.subscribe(cache);
}
return cache.subscribe(observable);
});
}