@@ -45,9 +45,10 @@ export class FromEventPatternObservable<T> extends Observable<T> {
45
45
* @param {function(handler: Function): any } addHandler A function that takes
46
46
* a `handler` function as argument and attaches it somehow to the actual
47
47
* 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
49
49
* 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.
51
52
* @param {function(...args: any): T } [selector] An optional function to
52
53
* post-process results. It takes the arguments from the event handler and
53
54
* should return a single value.
@@ -57,13 +58,13 @@ export class FromEventPatternObservable<T> extends Observable<T> {
57
58
* @owner Observable
58
59
*/
59
60
static create < T > ( addHandler : ( handler : Function ) => any ,
60
- removeHandler : ( handler : Function ) => void ,
61
+ removeHandler : ( handler : Function , signal ?: any ) => void ,
61
62
selector ?: ( ...args : Array < any > ) => T ) {
62
63
return new FromEventPatternObservable ( addHandler , removeHandler , selector ) ;
63
64
}
64
65
65
66
constructor ( private addHandler : ( handler : Function ) => any ,
66
- private removeHandler : ( handler : Function ) => void ,
67
+ private removeHandler : ( handler : Function , signal ?: any ) => void ,
67
68
private selector ?: ( ...args : Array < any > ) => T ) {
68
69
super ( ) ;
69
70
}
@@ -75,10 +76,11 @@ export class FromEventPatternObservable<T> extends Observable<T> {
75
76
this . _callSelector ( subscriber , args ) ;
76
77
} : function ( e : any ) { subscriber . next ( e ) ; } ;
77
78
78
- this . _callAddHandler ( handler , subscriber ) ;
79
+ const retValue = this . _callAddHandler ( handler , subscriber ) ;
80
+
79
81
subscriber . add ( new Subscription ( ( ) => {
80
82
//TODO: determine whether or not to forward to error handler
81
- removeHandler ( handler ) ;
83
+ removeHandler ( handler , retValue ) ;
82
84
} ) ) ;
83
85
}
84
86
@@ -92,9 +94,9 @@ export class FromEventPatternObservable<T> extends Observable<T> {
92
94
}
93
95
}
94
96
95
- private _callAddHandler ( handler : ( e : any ) => void , errorSubscriber : Subscriber < T > ) : void {
97
+ private _callAddHandler ( handler : ( e : any ) => void , errorSubscriber : Subscriber < T > ) : any | null {
96
98
try {
97
- this . addHandler ( handler ) ;
99
+ return this . addHandler ( handler ) || null ;
98
100
}
99
101
catch ( e ) {
100
102
errorSubscriber . error ( e ) ;
0 commit comments