如何检查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();
我想为此找到一种优雅的方式。
有什么想法吗?
答案 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来自哪里,所以也许我可以进一步帮助。