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

fab*_*i_k 3 rxjs ngrx ngrx-effects angular ngrx-store

我有以下问题:

在服务内部,我在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 }));
     }
 });
Run Code Online (Sandbox Code Playgroud)

然后,这将触发下一个副作用:

@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()));
Run Code Online (Sandbox Code Playgroud)

然后,服务中的方法fetchSmallWidgetData将使用“新” HttpClient执行其余调用。

以下是日志: 浏览器日志

因此,问题在于ngrx / effect中止了先前的调用。我测试了之间的超时。当超时时间足够长时,一切都会成功。

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

amu*_*amu 5

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