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();