我已编写此效果器来一次处理一个呼叫:
@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 的有效负载)来馈送效果时,一个接一个地发送请求时,不会相应地调度成功和失败操作,如果失败则取消操作。
如何修改它,使其可以处理多个请求而不是一个请求?
编辑:我可以在“网络”标签中看到所有请求及其结果。但是只调度了一个动作。
答案 0 :(得分:0)
您正在使用RxJS运算符exhaustMap
,当已经有一个请求正在运行时,它将取消传入的请求。
要运行所有请求,请使用mergeMap
(并行运行)或concatMap
(运行串行)。