refactor(async_pipe): use subscription strategy interface
The strategies for Promise and Observable based subscriptions have (nearly) the same method signatures. They should implement a common interface. Closes #7573
This commit is contained in:

committed by
Misko Hevery

parent
ceac045a7f
commit
adc135e6c8
@ -5,7 +5,13 @@ import {ObservableWrapper, Observable, EventEmitter} from '../../src/facade/asyn
|
|||||||
|
|
||||||
import {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';
|
import {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';
|
||||||
|
|
||||||
class ObservableStrategy {
|
interface SubscriptionStrategy {
|
||||||
|
createSubscription(async: any, updateLatestValue: any, onError?: (v: any) => any): any;
|
||||||
|
dispose(subscription: any): void;
|
||||||
|
onDestroy(subscription: any): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ObservableStrategy implements SubscriptionStrategy {
|
||||||
createSubscription(async: any, updateLatestValue: any,
|
createSubscription(async: any, updateLatestValue: any,
|
||||||
onError: (v: any) => any = e => { throw e; }): any {
|
onError: (v: any) => any = e => { throw e; }): any {
|
||||||
return ObservableWrapper.subscribe(async, updateLatestValue, onError);
|
return ObservableWrapper.subscribe(async, updateLatestValue, onError);
|
||||||
@ -16,7 +22,7 @@ class ObservableStrategy {
|
|||||||
onDestroy(subscription: any): void { ObservableWrapper.dispose(subscription); }
|
onDestroy(subscription: any): void { ObservableWrapper.dispose(subscription); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class PromiseStrategy {
|
class PromiseStrategy implements SubscriptionStrategy {
|
||||||
createSubscription(async: Promise<any>, updateLatestValue: (v: any) => any,
|
createSubscription(async: Promise<any>, updateLatestValue: (v: any) => any,
|
||||||
onError: (v: any) => any = e => { throw e; }): any {
|
onError: (v: any) => any = e => { throw e; }): any {
|
||||||
return async.then(updateLatestValue, onError);
|
return async.then(updateLatestValue, onError);
|
||||||
@ -61,7 +67,7 @@ export class AsyncPipe implements OnDestroy {
|
|||||||
_subscription: Object = null;
|
_subscription: Object = null;
|
||||||
/** @internal */
|
/** @internal */
|
||||||
_obj: Observable<any>| Promise<any>| EventEmitter<any> = null;
|
_obj: Observable<any>| Promise<any>| EventEmitter<any> = null;
|
||||||
private _strategy: any = null;
|
private _strategy: SubscriptionStrategy = null;
|
||||||
/** @internal */
|
/** @internal */
|
||||||
public _ref: ChangeDetectorRef;
|
public _ref: ChangeDetectorRef;
|
||||||
constructor(_ref: ChangeDetectorRef) { this._ref = _ref; }
|
constructor(_ref: ChangeDetectorRef) { this._ref = _ref; }
|
||||||
|
Reference in New Issue
Block a user