Я сделал несколько запросов параллельно. затем я выдаю ошибку при тайм-ауте.
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 я заметил, что все параллельные запросы отменяются при первом тайм-ауте.