[RxJS] Multicasting shortcuts: publish() and variants
Because using multicast with a new Subject is such a common pattern, there is a shortcut in RxJS for this: the publish() operator. This lesson introduces publish() and its variants publishReplay(), publishBehavior(), publishLast(), share(), and shows how they simplify the creation of multicasted Observables.
var shared = Rx.Observable.interval(1000) .do(x => console.log('source ' + x)) .multicast(new Rx.Subject()) .refCount();
This partten multicast(new Rx.Subject()) to create sharable subject is so common, there is shortcut to doing this: 'publish()':
var shared = Rx.Observable.interval(1000) .do(x => console.log('source ' + x)) .publish() .refCount();
Also for BehaviourSubject(), AsyncSubject(), ReplaySubject() they all have:
// publish = multicast + Subject // publishReplay = multicast + ReplaySubject // publishBehavior = multicast + BehaviorSubject // publishLast = multicast + AsyncSubject
In fact, publish.refCount() is also common used, so there is another alias for this =.=!!
var shared = Rx.Observable.interval(1000) .do(x => console.log('source ' + x)) .share(); // share() == publish().refCount() == multiCast(new Rx.Subject()).refCount()
var shared = Rx.Observable.interval(1000) .do(x => console.log('source ' + x)) .share(); // share = publish().refCount() // publish = multicast + Subject // publishReplay = multicast + ReplaySubject // publishBehavior = multicast + BehaviorSubject // publishLast = multicast + AsyncSubject var observerA = { next: function (x) { console.log('A next ' + x); }, error: function (err) { console.log('A error ' + err); }, complete: function () { console.log('A done'); }, }; var subA = shared.subscribe(observerA); var observerB = { next: function (x) { console.log('B next ' + x); }, error: function (err) { console.log('B error ' + err); }, complete: function () { console.log('B done'); }, }; var subB; setTimeout(function () { subB = shared.subscribe(observerB); }, 2000); setTimeout(function () { subA.unsubscribe(); console.log('unsubscribed A'); }, 5000); setTimeout(function () { subB.unsubscribe(); console.log('unsubscribed B'); }, 7000);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2015-10-23 [Angular 2] Inject Service
2015-10-23 [Angular 2] Use Service use Typescript