如何检查mobx observable是否有订阅者?

时间:2018-01-14 15:29:01

标签: javascript angular observer-pattern mobx

如何检查mobx observable是否有订阅者? 或者当观察者获得订阅者时如何获得事件?

例如,我有一些方法:fetchData()和一些变量:@observable responseData,我想只在responseData有订阅者(消费者喜欢@reaction或@autorun)时才运行fetchData()。

如果有方法isObservableHasSubscribers(observableVar);

,那就太好了

完整代码示例(堆栈:Angular和Mobx):

SomeStore {
    @observable responseData;

    fetchData(){
       if(/* check? */) return; // <- here need some Check ????

       fetchDataFromServer().then((d)=>{
          this.responseData = d;
       })
    }
}

const store = new SomeStore();
let unimportant;

// this is optional consumer (subscriber)...
autorun(() => {
   unimportant = store.responseData;
});

store.fetchData();

我想为此找到一种优雅的方式。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

很确定这是不可能的。 Observables不会持有任何州。但是受试者呢。在以前的RxJs版本中有类似const initValues = { id: '', name: '' }; class Store { @observable values = {}; constructor() { extendObservable(this.values, initValues); } reset() { extendObservable(this.values, initValues); } } 的方法,但在RxJs 5中它们被删除了。但是,有一个属性会对观察者进行计数 - subject.hasObservers()

所以你能做的就是将你的Observable变成主体并对此采取行动。显示你的Observable来自哪里,所以也许我可以进一步帮助。