Rxjs--多播操作符

多播(multicast、share、publish)...

多播可以通过 Subject.asObservable 将Subject转成后Observable 使用操作符并订阅

如果不想显式调用 connect(),我们可以使用 ConnectableObservable 的 refCount() 方法(引用计数),这个方法返回 Observable,这个 Observable 会追踪有多少个订阅者。当订阅者的数量从0变成1,它会调用connect() 以开启共享的执行。当订阅者数量从1变成0时,它会完全取消订阅,停止进一步的执行

refCount的作用是,当有第一个订阅者时,多播 Observable 会自动地启动执行,而当最后一个订阅者离开时,多播 Observable 会自动地停止执行。

multicast

public multicast(subjectOrSubjectFactory: Function | Subject, selector: Function): Observable

返回的 Observable 发出对 ConnectableObservable 发出的项调用一个指定的 selector 函数的结果, ConnectableObservable 可以在潜在的多个流之间共享单个 subscription

    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();
名称类型属性描述
subjectOrSubjectFactoryFunction | Subject 

用来创建中间 Subject 的工厂函数,源序列的元素将通过 该 Subject 多播到 selector函数,或者将元素推入该 Subject 

selectorFunction

可选的

可选的选择器函数,可以根据需要多次使用以多播源流,而不会导致源流 生成多个 subscriptions 。给定源的订阅者会从订阅开始的一刻起,接收源的所有通知。

14000014_PoYO.png

multicasted.connect();

connect() 方法十分重要,它决定了何时启动共享的 Observable 执行。因为 connect() 方法在底层执行了 source.subscribe(subject),所以它返回的是 Subscription,你可以取消订阅以取消共享的 Observable 执行。

share

public share(): Observable<T>

返回: Observable<T> Observable,订阅该 Observable 后向它的观察者同时发送数据。

14000015_UpXR.png

publish

public publish(selector: Function): *

返回 ConnectableObservable,它是 Observable 的变种,它会一直等待,直到 connnect 方法被调用才会开始把值发送给那些订阅它的观察者

14000018_PYTn.png

 

 

 

转载于:https://my.oschina.net/u/3412211/blog/1606737

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值