Skip to content

Commit 01d0622

Browse files
committed
feat(fromEventPattern): support pass signal from addHandler to removeHandler
- relates to #1900
1 parent dd925a8 commit 01d0622

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/observable/FromEventPatternObservable.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ export class FromEventPatternObservable<T> extends Observable<T> {
4545
* @param {function(handler: Function): any} addHandler A function that takes
4646
* a `handler` function as argument and attaches it somehow to the actual
4747
* source of events.
48-
* @param {function(handler: Function): void} removeHandler A function that
48+
* @param {function(handler: Function, signal?: any): void} removeHandler A function that
4949
* takes a `handler` function as argument and removes it in case it was
50-
* previously attached using `addHandler`.
50+
* previously attached using `addHandler`. if addHandler returns signal to teardown when remove,
51+
* removeHandler function will forward it.
5152
* @param {function(...args: any): T} [selector] An optional function to
5253
* post-process results. It takes the arguments from the event handler and
5354
* should return a single value.
@@ -57,13 +58,13 @@ export class FromEventPatternObservable<T> extends Observable<T> {
5758
* @owner Observable
5859
*/
5960
static create<T>(addHandler: (handler: Function) => any,
60-
removeHandler: (handler: Function) => void,
61+
removeHandler: (handler: Function, signal?: any) => void,
6162
selector?: (...args: Array<any>) => T) {
6263
return new FromEventPatternObservable(addHandler, removeHandler, selector);
6364
}
6465

6566
constructor(private addHandler: (handler: Function) => any,
66-
private removeHandler: (handler: Function) => void,
67+
private removeHandler: (handler: Function, signal?: any) => void,
6768
private selector?: (...args: Array<any>) => T) {
6869
super();
6970
}
@@ -75,10 +76,11 @@ export class FromEventPatternObservable<T> extends Observable<T> {
7576
this._callSelector(subscriber, args);
7677
} : function(e: any) { subscriber.next(e); };
7778

78-
this._callAddHandler(handler, subscriber);
79+
const retValue = this._callAddHandler(handler, subscriber);
80+
7981
subscriber.add(new Subscription(() => {
8082
//TODO: determine whether or not to forward to error handler
81-
removeHandler(handler);
83+
removeHandler(handler, retValue) ;
8284
}));
8385
}
8486

@@ -92,9 +94,9 @@ export class FromEventPatternObservable<T> extends Observable<T> {
9294
}
9395
}
9496

95-
private _callAddHandler(handler: (e: any) => void, errorSubscriber: Subscriber<T>): void {
97+
private _callAddHandler(handler: (e: any) => void, errorSubscriber: Subscriber<T>): any | null {
9698
try {
97-
this.addHandler(handler);
99+
return this.addHandler(handler) || null;
98100
}
99101
catch (e) {
100102
errorSubscriber.error(e);

0 commit comments

Comments
 (0)