|
"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; |
|
|