| import { Subscriber } from '../Subscriber'; |
| import { async } from '../scheduler/async'; |
| export function debounceTime(dueTime, scheduler = async) { |
| return (source) => source.lift(new DebounceTimeOperator(dueTime, scheduler)); |
| } |
| class DebounceTimeOperator { |
| constructor(dueTime, scheduler) { |
| this.dueTime = dueTime; |
| this.scheduler = scheduler; |
| } |
| call(subscriber, source) { |
| return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler)); |
| } |
| } |
| class DebounceTimeSubscriber extends Subscriber { |
| constructor(destination, dueTime, scheduler) { |
| super(destination); |
| this.dueTime = dueTime; |
| this.scheduler = scheduler; |
| this.debouncedSubscription = null; |
| this.lastValue = null; |
| this.hasValue = false; |
| } |
| _next(value) { |
| this.clearDebounce(); |
| this.lastValue = value; |
| this.hasValue = true; |
| this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this)); |
| } |
| _complete() { |
| this.debouncedNext(); |
| this.destination.complete(); |
| } |
| debouncedNext() { |
| this.clearDebounce(); |
| if (this.hasValue) { |
| const { lastValue } = this; |
| this.lastValue = null; |
| this.hasValue = false; |
| this.destination.next(lastValue); |
| } |
| } |
| clearDebounce() { |
| const debouncedSubscription = this.debouncedSubscription; |
| if (debouncedSubscription !== null) { |
| this.remove(debouncedSubscription); |
| debouncedSubscription.unsubscribe(); |
| this.debouncedSubscription = null; |
| } |
| } |
| } |
| function dispatchNext(subscriber) { |
| subscriber.debouncedNext(); |
| } |
| //# sourceMappingURL=debounceTime.js.map |