Skip to content

Instantly share code, notes, and snippets.

@cwharris
Created December 10, 2013 20:19
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 cwharris/7897534 to your computer and use it in GitHub Desktop.
Save cwharris/7897534 to your computer and use it in GitHub Desktop.
Rx.Observable.prototype.delayMinimumInterval: ensures a minimum interval between notifications.
Rx.Observable.prototype.delayMinimumInterval = function (relativeTime, scheduler) {
if (scheduler === undefined) scheduler = Rx.Scheduler.timeout;
var latest = scheduler.now();
return this
.selectMany(function (x) {
var now = new Date(scheduler.now());
var next = new Date(latest);
next.setMilliseconds(next.getMilliseconds() + relativeTime);
latest = next > now ? next : now;
return Rx.Observable.returnValue(x).delay(latest, scheduler);
});
};
var Rx = require('rx');
var a = Rx.Observable.interval(125).take(25);
var b = Rx.Observable.interval(75).take(25);
a.merge(b)
.timeInterval()
.delayMinimumInterval(100)
.timeInterval()
.select(function (x) {
return {
value: x.value.value,
altered: x.interval,
original: x.value.interval
};
})
.subscribe(function (x) {
console.log(x);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment