Как проверить, есть ли у подписчиков mobx? Или как получить событие, когда наблюдатель приобретает подписчиков?
Например, у меня есть некоторый метод: fetchData()
и некоторая переменная: @observable responseData
, и я хочу запускать fetchData() только тогда, когда у responseData есть подписчики (такие пользователи, как @reaction или @autorun).
И было бы неплохо, если бы был метод isObservableHasSubscribers(observableVar);
полный пример кода (стек: угловой и 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();
Я хочу найти элегантный способ для этого.
Есть идеи?
Довольно уверен, что это невозможно. Наблюдаемые не имеют никакого состояния. Но субъекты. В предыдущих версиях RxJs были такие методы, как subject.hasObservers()
, но в RxJs 5 они удалены. Однако есть свойство, которое учитывает наблюдателей - subject.observers.length
.
Итак, что вы можете сделать, это превратить ваш Observable в тему и действовать по этому поводу. Покажите, откуда появился ваш Наблюдатель, поэтому, возможно, я мог бы помочь дальше.
hasObservers
под капотом , поэтому, возможно, стоит открыть проблему и обсудить ее с создателями, если вы не можете найти способ отследить ее самостоятельно.