【发布时间】:2017-01-09 21:12:27
【问题描述】:
我想创建一个发出文件添加/删除的 observable(通过chokidar)。我可以通过这样的方式做到这一点:
Rx.Observable.create((subscriber) => {
this.watcher = chokidar.watch(
this.contentPath
);
this.watcher.on('addDir', () => { subscriber.next(); });
this.watcher.on('unlinkDir', () => { subscriber.next(); });
});
我想做的是,我想停止观看文件,如果没有订阅者,当有人订阅它时重新开始。像这样,但使用 RxJs:
class Notifier {
constructor() {
this.subscriberCount = 0;
}
subscribe(onNext, onError, complete) {
this.subscriberCount++;
if (this.subscriberCount === 1) {
this.startInternalWatcher();
}
return () => {
this.subscriberCount--;
if (this.subscriberCount === 0) {
this.stopInternalWatcher();
}
}
}
}
// files are not watched
const n = new Notifier();
const s1 = n.subscribe(() => {}) // files are being wacthed
const s2 = n.subscribe(() => {}) // files are being wacthed
s1() // unsubscribed from 1, files are still watched.
s2() // unsubscribed from 2, files are not watched because no one is interested in.
我是 RxJs 的新手,所以我可能会遗漏一些明显的解决方案。这可能吗?
【问题讨论】: