@ ngrx / effect在Angular App中中止多个REST调用

时间:2017-11-28 09:44:05

标签: angular rxjs ngrx ngrx-store ngrx-effects

我有以下问题:

在服务内部我在forEach循环中触发相同的ngrx Action

 sensorCategories.forEach(category => {
     if (category === 'power' || category === 'air-flow') {
       this.store.dispatch(new fromEnergyManagementActions.FetchBigWidgetDataAction({ category: category }));
     } else {
       this.store.dispatch(new fromEnergyManagementActions.FetchSmallWidgetDataAction({ category: category }));
     }
 });

然后会触发下一个副作用:

@Effect()
fetchSmallWidgetData: Observable<Action> = this.actions
    .ofType(fromEnergyManagementActions.FETCH_SMALL_WIDGET_DATA)
    .map(toPayload)
    .switchMap(payload => this.dashboardDataService.fetchSmallWidgetData(payload))
    .map((data: SmallWidgetData) => new fromEnergyManagementActions.FetchSmallWidgetDataSuccessAction(data))
    .catch(error => of(new fromEnergyManagementActions.FetchSmallWidgetDataFailureAction()));

来自服务的方法fetchSmallWidgetData将使用'new'HttpClient执行rest调用。

以下是日志: init(charactersIn:)

所以问题是,ngrx / effect中止了之前的调用。我在中间超时测试了它。当超时足够长时,一切都成功。

你的建议是什么?是否有最佳实践,我可以使用? 谢谢你的帮助

1 个答案:

答案 0 :(得分:3)

这是因为您在效果中使用了switchMap。切换到mergeMap以允许维护多个内部订阅。