Как изменить эффект для работы с несколькими запросами? - PullRequest
0 голосов
/ 05 ноября 2018

Я написал этот эффект для обработки одного вызова за раз:

@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 голосов
/ 05 ноября 2018

Вы используете оператор RxJS exhaustMap, который отменяет входящие запросы, когда уже запущен один запрос.

Чтобы выполнить все запросы, используйте mergeMap (параллельный запуск) или concatMap (последовательный запуск).

...