RxJs-计算与分析;仅当存在订阅服务器时才发出值

RxJs-计算与分析;仅当存在订阅服务器时才发出值,rxjs,rxjs5,Rxjs,Rxjs5,我想创建一个发出文件添加/删除的可观察对象(通过chokidar)。我可以这样做: Rx.Observable.create((订户)=>{ this.watcher=chokidar.watch( 这是contentPath ); this.watcher.on('addDir',()=>{subscriber.next();}); this.watcher.on('unlinkDir',()=>{subscriber.next();}); }); 我想做的是,如果没有订户,我想停止观看文件

我想创建一个发出文件添加/删除的可观察对象(通过
chokidar
)。我可以这样做:

Rx.Observable.create((订户)=>{
this.watcher=chokidar.watch(
这是contentPath
);
this.watcher.on('addDir',()=>{subscriber.next();});
this.watcher.on('unlinkDir',()=>{subscriber.next();});
});
我想做的是,如果没有订户,我想停止观看文件,然后在有人订阅时重新开始。类似于此,但使用RxJs:

类通知程序{
构造函数(){
this.subscriberCount=0;
}
订阅(onNext、onError、complete){
这个.subscriberCount++;
if(this.subscriberCount==1){
这个.startInternalWatcher();
}
return()=>{
这是一个数字;
if(this.subscriberCount==0){
this.stopInternalWatcher();
}
}
}
}
//不监视文件
const n=新通知程序();
const s1=n.subscribe(()=>{})//正在创建文件
const s2=n.subscribe(()=>{})//正在创建文件
s1()//已从1取消订阅,文件仍处于监视状态。
s2()//已从2取消订阅,文件不受监视,因为没有人对其感兴趣。

我是RxJs的新手,因此可能缺少一些明显的解决方案。这有可能吗?

你走对了方向。首先,如果您从创建者返回一个函数,那么您可以使用它来销毁观察者

这将解决您的大部分问题,但如果您想确保一次最多有一个“观察者”,您可以附加:

return Rx.Observable.create((subscriber) => {
  this.watcher = chokidar.watch(
     this.contentPath
  );
  this.watcher.on('addDir', () => { subscriber.next(); });
  this.watcher.on('unlinkDir', () => { subscriber.next(); });

  return () => this.watcher.off('addDir unlinkDir');
})
.publish()
.refCount();