Skip to content

Commit 3dc1c00

Browse files
committed
perf(fromEventPattern): ~3x improvement in speed
refactor(FromEventPatternObservable): remove to use tryCatch
2 parents 2a7b001 + f99895b commit 3dc1c00

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

src/observable/FromEventPatternObservable.ts

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import {Observable} from '../Observable';
22
import {Subscription} from '../Subscription';
3-
import {tryCatch} from '../util/tryCatch';
4-
import {errorObject} from '../util/errorObject';
53
import {Subscriber} from '../Subscriber';
64

75
/**
@@ -71,26 +69,35 @@ export class FromEventPatternObservable<T, R> extends Observable<T> {
7169
}
7270

7371
protected _subscribe(subscriber: Subscriber<T>) {
74-
const addHandler = this.addHandler;
7572
const removeHandler = this.removeHandler;
76-
const selector = this.selector;
7773

78-
const handler = selector ? function(e: any) {
79-
let result = tryCatch(selector).apply(null, arguments);
80-
if (result === errorObject) {
81-
subscriber.error(result.e);
82-
} else {
83-
subscriber.next(result);
84-
}
74+
const handler = !!this.selector ? (...args: Array<any>) => {
75+
this._callSelector(subscriber, args);
8576
} : function(e: any) { subscriber.next(e); };
8677

87-
let result = tryCatch(addHandler)(handler);
88-
if (result === errorObject) {
89-
subscriber.error(result.e);
90-
}
78+
this._callAddHandler(handler, subscriber);
9179
subscriber.add(new Subscription(() => {
9280
//TODO: determine whether or not to forward to error handler
9381
removeHandler(handler);
9482
}));
9583
}
96-
}
84+
85+
private _callSelector(subscriber: Subscriber<T>, args: Array<any>): void {
86+
try {
87+
const result: T = this.selector(...args);
88+
subscriber.next(result);
89+
}
90+
catch (e) {
91+
subscriber.error(e);
92+
}
93+
}
94+
95+
private _callAddHandler(handler: (e: any) => void, errorSubscriber: Subscriber<T>): void {
96+
try {
97+
this.addHandler(handler);
98+
}
99+
catch (e) {
100+
errorSubscriber.error(e);
101+
}
102+
}
103+
}

0 commit comments

Comments
 (0)