Angular: пытается выполнить вложенную подписку - PullRequest
0 голосов
/ 22 апреля 2020

Я очень новичок в Angular и пытаюсь обдумать множество концепций. У меня есть наблюдаемая, которая правильно получает массив json объектов обратно из API. Проблема заключается в том, что для каждого члена массива мне нужно вызвать второй API, чтобы вернуть одно значение (примечание: я ограничу возвращение первого вызова API 6 членами). Затем я хочу сохранить это единственное значение в каждом элементе массива как новое свойство. Вызов первого API возвращает значение, которое мне потребуется для запроса второго API, чтобы получить значение, которое я хочу сохранить.

Я нашел несколько примеров того, как это сделать, но я все еще немного борюсь немного. Частично проблема в том, что я использую интерфейс «Фильмы», и это сбивает меня с толку (я думаю). Это очень близко к тому, что я хочу сделать. Любая помощь будет принята с благодарностью.

public getMovies(): Observable<Movie[]>
  {
    return this.http.get<Movie[]>(this.apiUrl, this.httpOptions).pipe(
      tap(data => console.log( data[0].movie.ids['imdb'])),    // this works.  I need to pass this into a second service
       catchError (this.handleError)
      );
      // mergeMap ( data => this.http.get (someAPI ?id= {data[0].movie.ids['imdb']} )) //make call here?
.subscribe ( data => {
   // not sure about this.  I need to store the return of the second call into Movie property.
}

1 Ответ

0 голосов
/ 22 апреля 2020

Я думаю, что это должно быть сделано отдельно, потому что представьте, что у вас есть массив из 1000 фильмов, вы сделаете 1 тыс. Запросов http.

Тогда я полагаю, вам нужно получить все фильмы и показать их, и когда пользователь нажимает каждое движение mov ie, выбирает новый API, который я поддерживаю, в описании mov ie (актеры, sipnosis и др. c).

public getMovies(): Observable<Movie[]>
{
     return this.http.get<Movie[]>(this.apiUrl, this.httpOptions);
}

public getMovieDescription(movieId): Observable<MovieDescription>
{
     //Use the Movie Id to fecth the movie description
     return this.http.get<MovieDescription>(this.apiUrl, this.httpOptions);
}

посмотрите на этот пример объединение двух потоков наблюдаемых в Rx Js в соответствии с заданными c условиями

...