Проблемы с извлечением данных из внутренних наблюдаемых - PullRequest
0 голосов
/ 15 марта 2019

У меня проблема с этим кодом.Я пытаюсь собрать дополнительную информацию из вторичной конечной точки, которая относится к идентификатору в возвращенной коллекции с первого получения.Может ли кто-нибудь помочь с , как получить фактические данные, которые возвращают массив наблюдаемых .Спасибо

this.http.get(`${this.apiUrl}/cinemas/location/cardiff`).pipe(
  map((data: any) => data.cinemas),
  map((cinemalist) => {
    return cinemalist.map(value => <Observable<any>>this.http.get(`https://api.cinelist.co.uk/get/cinema/${value.id}`));
  })
).subscribe(results => {
  console.log(results);
});

Ответы [ 2 ]

4 голосов
/ 15 марта 2019

Вместо map вы можете сделать switchMap с forkJoin:

this.http.get(`${this.apiUrl}/cinemas/location/cardiff`).pipe(
  map((data: any) => data.cinemas),
  switchMap((cinemas) => forkJoin(cinemas.map(value => <Observable<any>>this.http.get(`https://api.cinelist.co.uk/get/cinema/${value.id}`));
  }))
).subscribe(results => {
  console.log(results);
});

Если вы хотите сохранить значение, вы можете попробовать что-то вроде этого:

this.http.get(`${this.apiUrl}/cinemas/location/cardiff`).pipe(
  map((data: any) => data.cinemas),
  switchMap((cinemas) => forkJoin(cinemas.map(value => <Observable<any>>this.http.get(`https://api.cinelist.co.uk/get/cinema/${value.id}`))
    .pipe(map(cinema => {...cinema,value}))
  }))
).subscribe(results => {
  console.log(results);
});
0 голосов
/ 15 марта 2019
this.http.get(`https://api.cinelist.co.uk/search/cinemas/location/${town}`).pipe(
      map((data: any) => data.cinemas),
      flatMap((cinemas) =>
        forkJoin(
          cinemas.map(value => {
            return this.http.get(`https://api.cinelist.co.uk/get/cinema/${value.id}`).pipe(
              map((result: any) => {
                return { ...result, ...value };
              }));
          })
        )
      )
    ).subscribe(x => {
      console.log(x);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...