| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| exports.debounceTime = void 0; |
| var async_1 = require("../scheduler/async"); |
| var lift_1 = require("../util/lift"); |
| var OperatorSubscriber_1 = require("./OperatorSubscriber"); |
| function debounceTime(dueTime, scheduler) { |
| if (scheduler === void 0) { scheduler = async_1.asyncScheduler; } |
| return lift_1.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(OperatorSubscriber_1.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; |
| })); |
| }); |
| } |
| exports.debounceTime = debounceTime; |
| //# sourceMappingURL=debounceTime.js.map |