catchError отменяет все параллельные запросы - PullRequest
0 голосов
/ 28 января 2020

Я сделал несколько запросов параллельно. затем я выдаю ошибку при тайм-ауте.

getAllDirections() {
...
return from(urls).pipe( // a list of api urls
  mergeMap((urlParam, index) =>
    this.http.get<ISchedules>(urlParam[0]).pipe(
      map(dataRes => {
        return dataRes;
      }),
      timeout(6000),
      catchError(error => {
        console.log(error);
        return throwError(`Request timeout ${error}`);
      })
    )
  )
); 

Затем в моем эффекте я фиксирую ошибку

$LoadSchedulingsByDirectionsByBranch = createEffect(() =>
  this.actions$.pipe(
    ofType<any>(ESchedulesActions.Type..),
    mergeMap(action =>
      this.apiCallsService.getAllDirections(action.payload, '2010-09-18').pipe(
        map(trips => ({
          type: ESchedulesActions.TypeSuccess,
          payload: trips
        })),
        catchError(err => {
          console.log(err);
          return of({
            type: ESchedulesActions.TypeFail,
            payload: err
          });
        })
      )
    )
  )
);

, проблема в том, что при обнаружении первый тайм-аут mergeMap останавливает и не обрабатывает другие вызовы. В результате я получаю только один console.log(error) вместо того, чтобы иметь ошибку при каждом запросе http. (попасть внутрь catchError только один раз)

В моей сети http devtools я заметил, что все параллельные запросы отменяются при первом тайм-ауте.

...