CombineLatest和异步管道

时间:2018-12-05 09:07:43

标签: angular rxjs

编辑一些错误键入的内容

我做了什么

// in component
export class WhatIdidComponent implements OnInit {
  storeData$
  combine$;

  constructor(
      private store: Store<AppState>
      private route: ActivatedRoute,
  ) {
      this.storeData$ = this.store.pipe(select((state: AppState) => state['p']['reviews']), share());
      this.combine$ = combineLatest(
         //I inserted async storeData$ variable in combineLatest
         this.storeData$,
         this.route.params.pipe(/*any operator*/)
      )
  }
}

// d

//in template.html
<ng-container *ngIf="(storeData$ | async) as data; else loading">
     // not working properly when this.storeData$ is in combineLatest
     {{data.blah}}
</ng-container>
当我在this.storeData中插入combineLatest时,带有异步管道的

storeData $无法正常工作

我认为this.storeData $与combineLatest无关。因为this.storeData$this.storeData$

,但它似乎与combineLatest有关。为什么?以及如何解决这个问题?

我想要的是

  1. 正确处理this.storeData和异步管道。

感谢您阅读

1 个答案:

答案 0 :(得分:0)

您正在使用share创建一个多播主题,一旦您订阅了combineLatest可观察的内容,该订阅源便订阅了源(this.store)。这导致所谓的“后期订户”错过了原始可观察者的通知。在这种情况下,后期订阅者是除第一个订阅者之外的所有其他订阅者,因此也是您的异步​​管道。

您的选择是放下share管道以保持可观察到的寒冷,或使用例如shareReplay(1)而是创建缓存行为。