rxjs-Subscriber全能宠儿,灵活操控一切的上帝之手。

615 阅读1分钟

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退订!

到处可见的SubscriberSubscriber是一个庞大的家族

  • InnerSubscriber
  • CombineLatestSubscriber
  • ConnectableSubscriber
  • AjaxSubscriber
  • ForkJoinSubscriber
  • RaceSubscriber ...