Angular 多个状态获得数据时的NgRx触发器选择器

Angular 多个状态获得数据时的NgRx触发器选择器,angular,redux,ngrx,Angular,Redux,Ngrx,在组件init上,我调用选择器“getData”,它应该返回来自2个状态属性的数据。这些属性由API调用和响应填充,但是其中一个调用比另一个调用耗时更长。因此,选择器只返回填充速度更快的状态,而不返回其他状态 如何使选择器仅在两个API都返回结果且状态属性已填充时才返回数据 应用程序组件 ... ngOnInit() { this.store.select(fromStore.getData()) .subscribe(data => {}) ....

在组件init上,我调用选择器“getData”,它应该返回来自2个状态属性的数据。这些属性由API调用和响应填充,但是其中一个调用比另一个调用耗时更长。因此,选择器只返回填充速度更快的状态,而不返回其他状态

如何使选择器仅在两个API都返回结果且状态属性已填充时才返回数据

应用程序组件

...
ngOnInit() {
   this.store.select(fromStore.getData())
      .subscribe(data => {})
          .....
      })
}
选择器:

export const getData = () => createSelector(
getUserState,  // this state takes longer to be populated
getCommentsState,
(users: UserState, comments: CommentsState) => {
    let combined = {...users, ...comments}
    return combined;
}
)


您可以使用rxjs中的纯旧
zip

const source$ = zip(
  this.store.select(t => users).pipe(filter(t => t !== null)),
  this.store.select(t => comments).pipe(filter(t => t !== null))
);

source$.subscribe(t => {
   ...
});

这听起来不像是正常的行为。。当另一个(子选择器)更改时,它应再次触发。我想知道这是否是你们减速机中的一个问题?或者只是去某个地方?
const source$ = zip(
  this.store.select(t => users).pipe(filter(t => t !== null)),
  this.store.select(t => comments).pipe(filter(t => t !== null))
);

source$.subscribe(t => {
   ...
});