Вы можете попробовать использовать оператор плоской карты rxJS для лучшей читаемости.Я думаю, что это будет выглядеть следующим образом.rxJS6, вам нужно будет использовать оператор канала для этого.
Более простой пример
Вот более сложный пример решения, чтобы понять, что происходит.
public test(): Observable<any>
{
return of([1]);
//when subscribed to returns [1]
}
public testTwo(value): void
{
console.log(value); // [1] <- comes from the observable
this.fromEndpoint = value;
}
public testThree(example): Observable<any>
{
if (example[0] === 1)
{
return of([3]);
// return an array of [3] when subscribed to.
}
}
public ngOnInit()
{
this.test().pipe(flatMap(response1 => (this.testTwo(response1),
this.testThree(response1)))).subscribe(final =>
{
console.log(final);
// this logs ['3'] as the calls are chained with flatMap
});
}
Надеюсь, более простой пример, который я собрал, немного облегчит понимание.Это заставляет меня думать, что вы могли бы сделать следующее для предоставленного вами кода:
Решение
this.http.get(url1).pipe(
flatMap(response1 => (this.exampleFunction(response1), this.http.get(response1))),
flatMap(response2 => (this.responseValue = response2, this.http.get(response2))),
flatMap(response3 => (this.exampleFunctionThree(response3), this.http.get(response3)))
).subscribe(final => {
console.log(final);
console.log(this.responseValue);
});
Обратите внимание, что console.log(final);
будет регистрировать только результатпоследнего наблюдаемого / API вызова и не собирать значения по пути.если вам нужно было собрать все значения, вы можете передать отдельную функцию для отправки ответа или объявить его по мере продвижения в более широкой области видимости.Я показал, что в приведенном выше примере.
Документация
flatmap и switchmap
of и подписок какони используются в примере
flatMap - псевдоним для mergeMap!