Angular:尝试执行嵌套订阅

问题描述 投票:0回答:1

我对Angular很陌生,正试图搞清楚这么多概念。 我有一个observable,可以正确地从一个api中获取一个json对象的数组,问题是对于数组中的每一个成员,我都需要调用第二个api来获取一个单一的值。 问题是,对于数组中的每个成员,我需要调用第二个api来获取一个单一的值(附带说明--我将限制第一个api调用的返回值为6个成员)。 然后我想把这个值作为一个新的属性存储到数组的每个成员中。对第一个api的调用返回一个值,我需要查询第二个api来获得我想要存储的值。

我找到了几个如何做到这一点的例子,但我还是有点困难。 部分问题是我使用了一个接口 "Movies",这让我很困扰(我想)。 这个 是相当接近我想做的事情。 任何帮助都将是非常感激的。

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.
}
angular api nested
1个回答
0
投票

我认为应该分开来做,因为想象一下你有一个1000部电影的数组,你会做1k的http请求。

那么我建议你需要获取所有的电影,并显示它们,当用户点击每部电影时,获取新的api,我相信它的电影描述(演员,sipnosis等)。

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);
}

看看这个例子 根据特定的条件将RxJs中的两个观测数据流连接起来。

© www.soinside.com 2019 - 2024. All rights reserved.