2017-05-12 18 views
1

は、私はJSONを返す2つのAPI呼び出しがあるとdetailIdを取得する各行オブジェクトをループして、rowDetailsをもう一度呼び出して、行オブジェクトに詳細を添付します。私はフィニッシュにすべてのコールを待つためにq.allSettledを使用することになり、角1では観測/ RxJSと角度で2つの従属APIコールをマージ

{ 
    {"row": 1, "detailId": a, "details": { row details}} 
    {"row": 2, "detailId": b, "details": { row details}} 
} 

:最終的な構造はそうのように放出される必要があります。

私はこれを観察可能な方法で実行しようとしており、私は概念的かつ実質的に苦労しています。私はあなたが最終的な製品として実際に合流した「ストリーム」をどのように放出するのかを知りません。

私は大体試してみた:

this.http 
    .get('rows') 
    .map(res => res.json()) 
    .flatMap(group => this.http.get('rowDetails' + detailId)) 
    .map(res => res.json()). 
    .subscribe(res => console.log(res)) 

はちょうどrowDetailsが呼び出す発する購読します。行の各オブジェクトを反復処理して、最終製品の結果をマージする際に別の呼び出しのためにそのdetailIdを取得するにはどうすればよいですか?どんな助けでも大歓迎です。

+0

2番目の 'get'は実際に最初の結果に依存しますか? 「Observable.combineLatest」がベスト・ベットのように見えない場合。 – jonrsharpe

+0

はい、それは、特定の行の行の詳細を取得する呼び出しを行うには、各行オブジェクトのdetailIdが必要です – AnotherMike

+0

したがって、最初の呼び出しの結果ごとに1つの呼び出しを分割し、すべての結果を一緒に結合しますか? – jonrsharpe

答えて

2

各アイテムを取得してHTTPリクエストを作成し、この内部リクエストが完了した後、更新されたアイテムをさらに伝播する必要があります。私は実際に内部mapからgroupを返すよ

this.http 
    .get('rows') 
    .map(res => res.json()) 
    .flatMap(group => this.http.get('rowDetails' + group.detailId) 
     .map(res => { 
      group.details = res.json(); 
      return group; 
     }) 
    ) 
    .subscribe(res => console.log(res)) 

注意してください。これには明らかに多くの方法がありますが、これが最も簡単な方法だと思います。

関連する問題