在调度操作以发出第二个操作后,如何等待一个商店完成

时间:2016-12-13 23:31:28

标签: angular rxjs ngrx

我有一个包含与我的组件相关的init数据的商店,这个数据的一个例子是带有apiPath的字符串。

   ngOnInit() {
       // this store contains data related to the component
       this.store.dispatch(this.searchActions.addPageData(this.pageData));
  }

然后我有另一个动作需要来自前一个商店的数据,并在路线参数更改时被触发:

this.route.params.subscribe((params: Params) => {
    this.store.dispatch(this.searchActions.routerParamsSearchPageChanged(pageFilters));
})

你如何等到第一个行动来填补商店,发出第二个动作。

1 个答案:

答案 0 :(得分:1)

我假设第一个操作(addPageData)用一些信息填充商店。然后,您想使用route参数过滤掉数据,猜测某种类型的查询?如果这个查询不能满足您的需求,也许您可​​以再详细说明一下。

基本上,检索所需的商店信息和查询参数。通过某种类型的条件筛选该查询,这可能只是像我一样检查null以确保数据存在。

 Observable.combineLatest(
        this.store.select(state => state.bookState),
        this.route.params.select<string>('query')
    )
    .filter(([bookState]) => bookState.books !== null)
    .subscribe(([books, query]) => {
        this.store.dispatch({
            type: '[Books] FILTER_BY_QUERY', 
            payload: {
                bookType: books.type,
                query: query
            }
        });
    });