Возвращает все результаты из наблюдаемой цепочки

#javascript #rxjs

#javascript #rxjs

Вопрос:

В моем приложении Angular я пытаюсь достичь следующего

  1. Выполнить Observable A
  2. Когда A завершится, выполните Observable B, используя результат A
  3. Когда 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]) => ...);