Как связать несколько подписок на наблюдаемое в пределах наблюдаемого в rxjs? - PullRequest
0 голосов
/ 04 марта 2019

Я хочу предотвратить дублирование http-вызовов.У меня есть несколько подписок на наблюдаемую, и у этой наблюдаемой есть switchMap, который решает, будет ли http-вызов:

getModules(): Observable<Module[]> {
  return this.modules$.pipe(
    switchMap((modules: Module[]) => {
      if (!modules) {
        return this.setModules(); // http call, returning observable
      }
      return this.modules$; // observable
    })
  );
}

Затем есть несколько подписок в различных компонентах приложения, вызывающих этот метод.Как я могу предотвратить несколько вызовов HTTP?Мне нужно отложить вызов http-наблюдаемого, а не отложить выданное значение.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вот как я решил эту проблему благодаря @Lazy Coder: я добавил флаг «занят» для getModules () и оставил подписку открытой для подписчиков, чтобы получать уведомления о том, когда наблюдаемая http обновляет исходные модули $.

private getModules(): Observable<Module[]> {
    return this.modules$.pipe(
      switchMap((modules: Module[]) => {
        if (!modules && !this.isBusy) {
          return this.setModules(); // updates the modules$ source when complete
        }
        return this.modules$;
      })
    );
  }
0 голосов
/ 04 марта 2019

Просто сохраните Observable как служебное свойство public вместо вызова getModules().subscribe(...) везде в вашем коде, потому что вы создаете несколько Observable, делая это.Действительно, оператор pipe создает новый Observable при каждом вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...