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