多播(multicast、share、publish)...html
多播能够经过 Subject.asObservable 将Subject转成后Observable 使用操做符并订阅es6
若是不想显式调用 connect(),咱们能够使用 ConnectableObservable 的 refCount() 方法(引用计数),这个方法返回 Observable,这个 Observable 会追踪有多少个订阅者。当订阅者的数量从0变成1,它会调用connect() 以开启共享的执行。当订阅者数量从1变成0时,它会彻底取消订阅,中止进一步的执行函数
refCount的做用是,当有第一个订阅者时,多播 Observable 会自动地启动执行,而当最后一个订阅者离开时,多播 Observable 会自动地中止执行。spa
public multicast(subjectOrSubjectFactory: Function | Subject, selector: Function): Observable
返回的 Observable 发出对 ConnectableObservable 发出的项调用一个指定的 selector 函数的结果, ConnectableObservable 能够在潜在的多个流之间共享单个 subscriptioncode
let a = Rx.Observable.from([{name: 'hi'},{name: 'ho'},{name: 'he'},{name: 'ha'}]); let b = a.multicast(() => new Rx.Subject()); b.subscribe(i => console.log(i)); b.subscribe(i => console.log(i)); let c = b.connect(); c.unsubscribe();
名称 | 类型 | 属性 | 描述 |
subjectOrSubjectFactory | Function | Subject | 用来建立中间 Subject 的工厂函数,源序列的元素将经过 该 Subject 多播到 selector函数,或者将元素推入该 Subject htm |
|
selector | Function | 可选的ip |
可选的选择器函数,能够根据须要屡次使用以多播源流,而不会致使源流 生成多个 subscriptions 。给定源的订阅者会从订阅开始的一刻起,接收源的全部通知。get |
multicasted.connect();io
connect() 方法十分重要,它决定了什么时候启动共享的 Observable 执行。由于 connect() 方法在底层执行了 source.subscribe(subject),因此它返回的是 Subscription,你能够取消订阅以取消共享的 Observable 执行。console
public share(): Observable<T>
返回: Observable<T> Observable,订阅该 Observable 后向它的观察者同时发送数据。
public publish(selector: Function): *
返回 ConnectableObservable,它是 Observable 的变种,它会一直等待,直到 connnect 方法被调用才会开始把值发送给那些订阅它的观察者。