import { operate } from '../util/lift'; | |
import { noop } from '../util/noop'; | |
import { createOperatorSubscriber } from './OperatorSubscriber'; | |
import { innerFrom } from '../observable/innerFrom'; | |
export function debounce(durationSelector) { | |
return 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(createOperatorSubscriber(subscriber, function (value) { | |
durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); | |
hasValue = true; | |
lastValue = value; | |
durationSubscriber = createOperatorSubscriber(subscriber, emit, noop); | |
innerFrom(durationSelector(value)).subscribe(durationSubscriber); | |
}, function () { | |
emit(); | |
subscriber.complete(); | |
}, undefined, function () { | |
lastValue = durationSubscriber = null; | |
})); | |
}); | |
} | |
//# sourceMappingURL=debounce.js.map |