NGRX 选择器在数据在商店中可用之前请求数据

dcp*_*450 6 rxjs ngrx angular rxjs6

当用户在屏幕上选择一个项目时,会触发一个动作,从 api 请求数据并将该数据加载到所选项目的商店中。

选择器用于获取返回数据的特定部分以创建图形。

选择器返回 undefined 因为商店还没有该数据。

我要么需要 store/action/dispatch 来通知对选择器的调用它准备好了,或者允许选择器继续请求直到它有它正在寻找的数据:

this.setItemDispatch(this.datetime, this.selectedItem, this.direction);

this.store.select(selectFlyoutTimelineBar(this.selectedItem, this.direction, 'Graph Title')).subscribe(x => {
  console.log('data returned:', x);
});
Run Code Online (Sandbox Code Playgroud)

派遣:

this.store.dispatch(
          new LoadStationArriveTimelineDataAction({
            station: selectedItem,
            start: { startDate: currentDate },
            query: this.codes,
            lineQuery: this.lineCode
          })
        );
Run Code Online (Sandbox Code Playgroud)

tim*_*ver 3

您可以使用 RxJSfilter操作。

this.store.pipe(
  select(selectFlyoutTimelineBar(this.selectedItem, this.direction, 'Graph Title')),
  filter(result => Boolean(result))
)
Run Code Online (Sandbox Code Playgroud)

我要么需要存储/操作/调度来向选择器的调用发出信号,表明它已准备好,要么允许选择器继续请求,直到它拥有要查找的数据:

选择器是一个 RxJS 可观察对象,每次其数据发生更改时,它都会发出一个新值。这意味着您不需要通知选择器进行更新。