Вы можете использовать forkJoin!
https://www.learnrxjs.io/operators/combination/forkjoin.html
Имейте в виду, что если какая-либо из внутренних наблюдаемых, предоставленная для ошибки forkJoin, вы потеряете значение любых других наблюдаемых, которые выполнили или уже завершили , если вы не уловите ошибку правильно на внутренней наблюдаемой . Если вас интересует только успешное завершение всех внутренних наблюдаемых, вы можете обнаружить ошибку снаружи.
Итак, просто убедитесь, что когда наблюдаемая ошибка выдаст ошибку, она все равно что-нибудь вернет:
forkJoin(
this.service.observableA.pipe(
map(data => {
return { result: 'succes', data: data };
}),
catchError(err => {
console.log(err);
return of({ result: 'failed', data: null });
})
),
this.service.observableB.pipe(
map(data => {
return { result: 'succes', data: data };
}),
catchError(err => {
console.log(err);
return of({ result: 'failed', data: null });
})
)
).subscribe(
// This will be triggered even if one of the observables fail
);
Конечно, в методе подписки вам нужно будет просмотреть список и проверить, являются ли свойства «result» «succes» или «fail» для каждого возвращенного ответа.