rxjs中的单播和多播

广告位招租
扫码页面底部二维码联系

rxjs的Subject具有多播的特性。著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】对于单播和多播怎么理解呢?

著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。转载请注明出处:www.tangshua【本文首发于唐霜的博客】未经授权,禁止复制转载。ng.net【转载请注明来源】

首先要了解一个概念“冷流和热流”。所谓“【转载请注明来源】本文作者:唐霜,转载请注明出处。冷流”是指数据的变化是固定死的,举个例子原创内容,盗版必究。本文作者:唐霜,转载请注明出处。

【本文受版权保护】原创内容,盗版必究。
let observable = Rx.Observable.create(function subscribe(obsever) {
observer.next(1)
observer.next(2)
})
observable.subscribe(v => console.log(v))

上面这段代码,subscribe的输出结【本文首发于唐霜的博客】【版权所有,侵权必究】果是可预知的,一定是先输出1,然后输出2【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】.

本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshua【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。ngnet】本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。

“热流”是什么呢?就是它的数据变化是不可【关注微信公众号:wwwtangshuangnet】【本文受版权保护】知的,随机的,随意的。例如通过fromE【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。vent产生的observable。

【作者:唐霜】未经授权,禁止复制转载。【关注微信公众号:wwwtangshua【未经授权禁止转载】原创内容,盗版必究。ngnet】

现在回来说单播和多播。

著作权归作者所有,禁止商业用途转载。【本文受版权保护】【本文首发于唐霜的博客】【原创内容,转载请注明出处】

单播是说,一个observable只能被【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】一个观察者消费。还是用代码说话:

【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.n【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。et 获取更多精彩内容】【本文首发于唐霜的博客】
let observable = Rx.Observable.create(function subscribe(obsever) {
  observer.next(1)
  observer.next(2)
})
observable.subscribe(v => console.log(v))
observable.subscribe(v => console.log(v))

上面这段代码会输出两次1,2。简单的说,本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。当调用observable.subscr著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】ibe时,create的传入参数func【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】tion subscribe会被调用一次【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。。也就是说,一个subscribe只能被【转载请注明来源】【原创不易,请尊重版权】一个observer消费。这就是单播。这著作权归作者所有,禁止商业用途转载。【转载请注明来源】些observer之间相互不影响(不要有【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net全局变量),它们虽然订阅同一个obser【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。able,但是,它们仅仅是利用了obse【本文首发于唐霜的博客】【作者:唐霜】rvable的处理数据的能力,至于数据源【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。、处理结果,都是独立的。

转载请注明出处:www.tangshua转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】ng.net【版权所有,侵权必究】

那什么是多播呢?就是一个有一个东西,可以【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】被多个观察者同时订阅。这个时候要引进rx【转载请注明来源】【作者:唐霜】js里面的Subject,它所创造的实例原创内容,盗版必究。【转载请注明来源】,能被多个观察者消费。代码说话:

转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.netng.net未经授权,禁止复制转载。【版权所有】唐霜 www.tangshu【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.netang.net【原创不易,请尊重版权】
let observable = Rx.Observable.create(function subscribe(obsever) {
  observer.next(1)
  observer.next(2)
})
let subject = new Rx.Subject() subject.subscribe(v => console.log(v)) subject.subscribe(v => console.log(v))
observable.subscribe(subject)

这个代码和前面不一样的地方在于,obse本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。rvable被subject订阅,当su【版权所有,侵权必究】【本文首发于唐霜的博客】bject被两个不同的observer订【本文首发于唐霜的博客】未经授权,禁止复制转载。阅时,subject执行一次functi本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.neton subscribe,但是同时通知这本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】两个observer。所以,当你得到的结本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】果是:1,1;2,2时,应该一点都不觉得本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net奇怪。在第一次执行next(1)的时候,本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。两个observer同时被执行。

【版权所有,侵权必究】【转载请注明来源】未经授权,禁止复制转载。