#javascript #rxjs
#javascript #rxjs
Вопрос:
В моем приложении Angular я пытаюсь достичь следующего
- Выполнить
Observable
A - Когда A завершится, выполните
Observable
B, используя результат A - Когда B завершится, верните результат для обоих A и B
Без 3-го пункта это было бы довольно просто, я думаю, я бы сделал что-то вроде этого:
this.myService.getData()
.pipe(
flatMap(firstResult => this.myService.getMoreData(firstResult.someField))
).subscribe(secondResult => {
// process the data
});
Проблема в том, что таким образом у меня есть доступ только к secondResult
в конце, но мне также нужно firstResult
.
Я не эксперт в RxJS observables, поэтому я бы действительно оценил любой совет о том, как подойти к этой проблеме.
Ответ №1:
Вы можете просто сопоставить второй результат с массивом обоих результатов.
this.myService.getData()
.pipe(
concatMap(firstResult => this.myService.getMoreData(firstResult.someField).pipe(
map(secondResult => [firstResult, secondResult]),
))
).subscribe(([first, second]) => ...);