Как проверить, что у mobx observable есть подписчики?

1

Как проверить, есть ли у подписчиков 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();

Я хочу найти элегантный способ для этого.

Есть идеи?

  • 0
    MobX использует hasObservers под капотом , поэтому, возможно, стоит открыть проблему и обсудить ее с создателями, если вы не можете найти способ отследить ее самостоятельно.
Теги:
angular
mobx
observer-pattern

1 ответ

0
Лучший ответ

Довольно уверен, что это невозможно. Наблюдаемые не имеют никакого состояния. Но субъекты. В предыдущих версиях RxJs были такие методы, как subject.hasObservers(), но в RxJs 5 они удалены. Однако есть свойство, которое учитывает наблюдателей - subject.observers.length.

Итак, что вы можете сделать, это превратить ваш Observable в тему и действовать по этому поводу. Покажите, откуда появился ваш Наблюдатель, поэтому, возможно, я мог бы помочь дальше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню