UNPKG

@reactivex/rxjs

Version:

Reactive Extensions for modern JavaScript

66 lines 1.9 kB
import { OuterSubscriber } from '../OuterSubscriber'; import { subscribeToResult } from '../util/subscribeToResult'; /** * @param durationSelector * @return {Observable<R>|WebSocketSubject<T>|Observable<T>} * @method throttle * @owner Observable */ export function throttle(durationSelector) { return this.lift(new ThrottleOperator(durationSelector)); } class ThrottleOperator { constructor(durationSelector) { this.durationSelector = durationSelector; } call(subscriber, source) { return source._subscribe(new ThrottleSubscriber(subscriber, this.durationSelector)); } } /** * We need this JSDoc comment for affecting ESDoc. * @ignore * @extends {Ignored} */ class ThrottleSubscriber extends OuterSubscriber { constructor(destination, durationSelector) { super(destination); this.destination = destination; this.durationSelector = durationSelector; } _next(value) { if (!this.throttled) { this.tryDurationSelector(value); } } tryDurationSelector(value) { let duration = null; try { duration = this.durationSelector(value); } catch (err) { this.destination.error(err); return; } this.emitAndThrottle(value, duration); } emitAndThrottle(value, duration) { this.add(this.throttled = subscribeToResult(this, duration)); this.destination.next(value); } _unsubscribe() { const throttled = this.throttled; if (throttled) { this.remove(throttled); this.throttled = null; throttled.unsubscribe(); } } notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) { this._unsubscribe(); } notifyComplete() { this._unsubscribe(); } } //# sourceMappingURL=throttle.js.map