From 90bf3f18f94cd63b5cdbfe83b7b7b5c5f021d641 Mon Sep 17 00:00:00 2001 From: OJ Kwon Date: Wed, 27 Jan 2016 10:36:02 -0800 Subject: [PATCH] perf(debounce): remove tryCatch/errorObject for custom tryCatching --- src/operator/debounce.ts | 45 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/operator/debounce.ts b/src/operator/debounce.ts index 8be11663b3..21ef20a97a 100644 --- a/src/operator/debounce.ts +++ b/src/operator/debounce.ts @@ -3,9 +3,6 @@ import {Observable} from '../Observable'; import {Subscriber} from '../Subscriber'; import {Subscription} from '../Subscription'; -import {tryCatch} from '../util/tryCatch'; -import {errorObject} from '../util/errorObject'; - import {OuterSubscriber} from '../OuterSubscriber'; import {InnerSubscriber} from '../InnerSubscriber'; import {subscribeToResult} from '../util/subscribeToResult'; @@ -34,7 +31,6 @@ class DebounceOperator implements Operator { } class DebounceSubscriber extends OuterSubscriber { - private value: T; private hasValue: boolean = false; private durationSubscription: Subscription = null; @@ -44,31 +40,38 @@ class DebounceSubscriber extends OuterSubscriber { super(destination); } - protected _next(value: T) { - let subscription = this.durationSubscription; - const duration = tryCatch(this.durationSelector)(value); + protected _next(value: T): void { + try { + const result = this.durationSelector.call(this, value); - if (duration === errorObject) { - this.destination.error(errorObject.e); - } else { - this.value = value; - this.hasValue = true; - if (subscription) { - subscription.unsubscribe(); - this.remove(subscription); - } - subscription = subscribeToResult(this, duration); - if (!subscription.isUnsubscribed) { - this.add(this.durationSubscription = subscription); + if (result) { + this._tryNext(value, result); } + } catch (err) { + this.destination.error(err); } } - protected _complete() { + protected _complete(): void { this.emitValue(); this.destination.complete(); } + private _tryNext(value: T, duration: Observable | Promise): void { + let subscription = this.durationSubscription; + this.value = value; + this.hasValue = true; + if (subscription) { + subscription.unsubscribe(); + this.remove(subscription); + } + + subscription = subscribeToResult(this, duration); + if (!subscription.isUnsubscribed) { + this.add(this.durationSubscription = subscription); + } + } + notifyNext(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber): void { @@ -79,7 +82,7 @@ class DebounceSubscriber extends OuterSubscriber { this.emitValue(); } - emitValue() { + emitValue(): void { if (this.hasValue) { const value = this.value; const subscription = this.durationSubscription;