Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 没有订户时,如何暂停shareReplay_Javascript_Rxjs_Observable - Fatal编程技术网

Javascript 没有订户时,如何暂停shareReplay

Javascript 没有订户时,如何暂停shareReplay,javascript,rxjs,observable,Javascript,Rxjs,Observable,例如: const s=rxjs.interval(2000).pipe(点击(console.log),shareReplay(1)) 常量b=s.subscribe(v=>{}) //等等,控制台将开始输出0,1,2,3。。。 b、 退订 //控制台将继续输出4,5,6,7。。。 我希望在没有订阅服务器时暂停流以节省CPU使用量 没有订户时,如何暂停流 目标是让多个订阅者共享一个流 当第一个订户到来时,流将以初始值开始,并定期提供数据 当新订户到来时,它将获得流中最近的值 当所有用户都离

例如:

const s=rxjs.interval(2000).pipe(点击(console.log),shareReplay(1)) 常量b=s.subscribe(v=>{}) //等等,控制台将开始输出0,1,2,3。。。 b、 退订 //控制台将继续输出4,5,6,7。。。 我希望在没有订阅服务器时暂停流以节省CPU使用量

没有订户时,如何暂停流

目标是让多个订阅者共享一个流

  • 当第一个订户到来时,流将以初始值开始,并定期提供数据
  • 当新订户到来时,它将获得流中最近的值
  • 当所有用户都离开时,数据流可以安全地关闭,下一个用户将被视为第一个用户

您需要一个
多播
来通过
ReplaySubject
共享您的数据,并使用
refCount
来跟踪订户数量

const s=rxjs.interval(2000).pipe(
点击(console.log),
多播(()=>新的ReplaySubject(1)),
refCount()
);
常量b=s.subscribe(v=>{})
设置超时(()=>{
b、 退订
}, 5000)

您有什么RxJS版本?看起来
refCount
就是您要找的。它工作得非常好。但是如果新订阅者是由
refCount
处理的,那么当新订阅者到来时,
ReplaySubject
怎么能立即响应呢。@臧明杰,正如你所说,
ReplaySubject(1)
会将其最新的
1
值推送给所有订阅者。而
refCount
负责为每个“订阅会话”共享相同的
ReplaySubject
。简单地说,每次所有订户取消订阅时,它都会重置为一个新的
ReplaySubject
。您可以从RxJS核心成员文章中了解更多关于多播的信息:@AlexanderPoshtaruk,如果您愿意推广某个内容,它至少应该涵盖特定的问题。链接“medium/cartant”与链接“github/rxjs”几乎相同。首先我们应该关心给出答案,晋升应该是次要的。