import { asyncScheduler } from '../scheduler/async'; | |
import { operate } from '../util/lift'; | |
import { createOperatorSubscriber } from './OperatorSubscriber'; | |
export function debounceTime(dueTime, scheduler) { | |
if (scheduler === void 0) { scheduler = asyncScheduler; } | |
return operate(function (source, subscriber) { | |
var activeTask = null; | |
var lastValue = null; | |
var lastTime = null; | |
var emit = function () { | |
if (activeTask) { | |
activeTask.unsubscribe(); | |
activeTask = null; | |
var value = lastValue; | |
lastValue = null; | |
subscriber.next(value); | |
} | |
}; | |
function emitWhenIdle() { | |
var targetTime = lastTime + dueTime; | |
var now = scheduler.now(); | |
if (now < targetTime) { | |
activeTask = this.schedule(undefined, targetTime - now); | |
subscriber.add(activeTask); | |
return; | |
} | |
emit(); | |
} | |
source.subscribe(createOperatorSubscriber(subscriber, function (value) { | |
lastValue = value; | |
lastTime = scheduler.now(); | |
if (!activeTask) { | |
activeTask = scheduler.schedule(emitWhenIdle, dueTime); | |
subscriber.add(activeTask); | |
} | |
}, function () { | |
emit(); | |
subscriber.complete(); | |
}, undefined, function () { | |
lastValue = activeTask = null; | |
})); | |
}); | |
} | |
//# sourceMappingURL=debounceTime.js.map |