Вложенный http-запрос в RxJS

#javascript #angular #rxjs #frontend

#javascript #угловой #rxjs #интерфейс

Вопрос:

Я новичок в Angular, поэтому столкнулся с проблемой. Как взаимодействовать с вложенным http-запросом в Angular с помощью RxJS?

 .pipe(
    map((res): Collection => ({
            id: res.id,
            name: res.name,
            description: res.description,
            tracks: res.tracks.items.map(track => this.trackService.fetchTrack(track.id)) //?
        }) 
    ),
)
  

Комментарии:

1. Вы можете найти вдохновение здесь

Ответ №1:

Вам нужно использовать switchMap для отображения из внешнего наблюдаемого во внутренний. И, видя, что у вас есть несколько HTTP-вызовов из массива, вы могли бы использовать forkJoin их для параллельного запуска.

Попробуйте выполнить следующее

 outerObservable().pipe(
  switchMap((res): Collection => {
    forkJoin(res.tracks.items.map(track => this.trackService.fetchTrack(track.id))).pipe(
      map(tracks => ({
        id: res.id,
        name: res.name,
        description: res.description,
        tracks: tracks
      }))
    )
  })
).subscribe(...)
  

Комментарии:

1. Большое вам спасибо, это сработало для меня, но единственное, что мне нужно было сделать, это заменить (res: Collection) на (res): Collection

2. Не уверен, почему (res: Collection) это не сработает, но, тем не менее, я обновил ответ, чтобы отразить ваши изменения.