|
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.debounce = void 0; |
|
var lift_1 = require("../util/lift"); |
|
var noop_1 = require("../util/noop"); |
|
var OperatorSubscriber_1 = require("./OperatorSubscriber"); |
|
var innerFrom_1 = require("../observable/innerFrom"); |
|
function debounce(durationSelector) { |
|
return lift_1.operate(function (source, subscriber) { |
|
var hasValue = false; |
|
var lastValue = null; |
|
var durationSubscriber = null; |
|
var emit = function () { |
|
durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); |
|
durationSubscriber = null; |
|
if (hasValue) { |
|
hasValue = false; |
|
var value = lastValue; |
|
lastValue = null; |
|
subscriber.next(value); |
|
} |
|
}; |
|
source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { |
|
durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); |
|
hasValue = true; |
|
lastValue = value; |
|
durationSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, emit, noop_1.noop); |
|
innerFrom_1.innerFrom(durationSelector(value)).subscribe(durationSubscriber); |
|
}, function () { |
|
emit(); |
|
subscriber.complete(); |
|
}, undefined, function () { |
|
lastValue = durationSubscriber = null; |
|
})); |
|
}); |
|
} |
|
exports.debounce = debounce; |
|
|