12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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
|