Прежде всего, вы хотите вызывать вещи последовательно, вы не должны использовать forkJoin
, он будет запускать все запросы одновременно, а затем ждать, пока все они завершатся.Если вы хотите вызывать их по одному, используйте concat
import { concat } from 'rxjs/operators';
import { of } from 'rxjs';
//emits 1,2,3
const sourceOne = of(1, 2, 3);
//emits 4,5,6
const sourceTwo = of(4, 5, 6);
//used as static
const example = concat(sourceOne, sourceTwo);
Но помимо этого.Ваш вопрос, почему метод ошибки не срабатывает.И это потому, что цепочка наблюдателей разрушается в тот момент, когда ошибка выдается где-то в середине обработки.Если вы хотите защитить себя от этого, вы должны кэшировать его либо на проблемной наблюдаемой.
forkJoin(
this.http.post(url1, obj1).pipe(map((res:Response) => res)).pipe(catchError(val => of('I caught: ${val}'))),
this.http.post(url2, obj2).pipe(map((res:Response) => res)).pipe(catchError(val => of('I caught: ${val}')))
).subscribe(
data => {
console.log('Data Called');
},
error => {
console.log('Error Called');
});
Или второй вариант - кэшировать его.Но тогда вы ничего не получите, если одна из наблюдаемых выдает ошибку.
forkJoin(
this.http.post(url1, obj1).pipe(map((res:Response) => res)),
this.http.post(url2, obj2).pipe(map((res:Response) => res))
)
.pipe(catchError(val => of('I caught: ${val}')))
.subscribe(
data => {
console.log('Data Called');
},
error => {
console.log('Error Called');
});
В документации ясно сказано так же: https://www.learnrxjs.io/operators/combination/forkjoin.html