如何修改效果以处理多个请求?

时间:2018-11-05 07:43:11

标签: rxjs observable ngrx ngrx-effects

我已编写此效果器来一次处理一个呼叫:

@Effect()
   indexCollectiveDocuments$ = this.actions$.pipe(
      ofType<IndexCollectiveDocuments>(CollectiveIndexingActionTypes.IndexCollectiveDocuments),
      mergeMapTo(this.store.select(getIndexingRequest)),
      exhaustMap((request: any[], index: number) => {
         return zip(...request.map(item => {
            this.currentItem = item;
            return this.indexingService.indexDocuments(item).pipe(
               map((response: any[]) => new IndexCollectiveDocumentsSuccess(response)),
               catchError(error => of(new IndexCollectiveDocumentsFailure({ error: error, item: this.currentItem })))
            )
         }))
      })
   );

它会根据请求结果分派成功和失败操作。

但是,当我使用多个项目( getIndexingRequest 的有效负载)来馈送效果时,一个接一个地发送请求时,不会相应地调度成功和失败操作,如果失败则取消操作。

如何修改它,使其可以处理多个请求而不是一个请求?

编辑:我可以在“网络”标签中看到所有请求及其结果。但是只调度了一个动作。

1 个答案:

答案 0 :(得分:0)

您正在使用RxJS运算符exhaustMap,当已经有一个请求正在运行时,它将取消传入的请求。

要运行所有请求,请使用mergeMap(并行运行)或concatMap(运行串行)。