Ваш код намного превосходит лучшие практики. Никогда не делайте подписку внутри другого.
Если ваши задачи представляют собой три отдельные задачи / наблюдаемые, которые не зависят друг от друга, тогда рассмотрите возможность использования forkJoin
(все наблюдаемые начинаются одновременно, и когда заканчивается последняя наблюдаемая, возвращает результат)
let observable1(param1);
let observable2(param2);
let observable3(param3);
let joinedObservables = forkJoin(observable1, observable2, observable3).subscribe(x => {
let result1 = x[0];
let result2 = x[1];
let result3 = x[2];
...
});
Если их результаты зависят друг от друга, вы можете использовать switchMap
, flatMap
, mergeMap
, exhaustMap
(проверить различия)
let resultObservable = return this.observable1().pipe(mergeMap((param1) => {
return this.observable2().pipe(map((param1) => {
....
return <result>;
}));
}));
resultObservable.subscribe(x => {
...
});