Subscriber全能宠儿,灵活操控一切的上帝之手。
Observable - 可观察的
Subscriber - 订户,预约者,签署者
实现 Observer 接口并且继承 Subscription 类。集观察者(实现Observer订阅上游数据),生产者(属性destination提供上游控制权)。是可以灵活操控一切的上帝之手。
class Subscriber<T> extends Subscription implements Observer<T>{
protected destination: PartialObserver<any>;
}
先看一下Observer,翻译观察者
export interface Observer<T> {
closed?: boolean;
next: (value: T) => void;
error: (err: any) => void;
complete: () => void;
}
Observer实现了三个方法next观察数据,error观察错误,complete观察完成,由此可知Subscriber是一个数据源观察者。
Subscription
订阅实例,提供退订操作。
在看下Subscription, 实现SubscriptionLike接口
class Subscription implements SubscriptionLike {}
看下SubscriptionLike接口的定义,继承自Unsubscribable,拥有unsubscribe退订方法,closed标志是否退订!
export interface Unsubscribable {
unsubscribe(): void;
}
export interface SubscriptionLike extends Unsubscribable {
unsubscribe(): void;
readonly closed: boolean;
}
add通过参TeardownLogic构造一个新的Subscription,并保存到_subscriptions,当执行unsubscribe时依次遍历_subscriptions执行unsubscribe
add(teardown: TeardownLogic): Subscription;
remove从_subscriptions移除指定subscription
remove(subscription: Subscription): void;
Subscriber
static create新建Subscriber
static create<T>(
next?: (x?: T) => void,
error?: (e?: any) => void,
complete?: () => void
): Subscriber<T>;
next, error,complete三个函数分别调用内部方法_next,_error,complete,这里是对三个方法的业务抽离,如需新功能可覆盖这三个方法来达到目的!,unsubscribe退订!
到处可见的Subscriber,Subscriber是一个庞大的家族
- InnerSubscriber
- CombineLatestSubscriber
- ConnectableSubscriber
- AjaxSubscriber
- ForkJoinSubscriber
- RaceSubscriber ...