2017-12-26 8 views
0

要求しますgetList()の結果、この部分を「同期」する方法、またはこれを行う正しい形式は何ですか?Angular5 RXJS再帰のhttpは、私は現在、このような状況を持っている

**私は私はあなたがスターを付けた取得したい理解として "RES" は "interable"

this.MyService.getList().subscribe(results => { 
     let url = 'https://api.github.com/users/'; 
     for(let res in results) {//This don't do the things "synchronous" 
      this.http.get(url + res.login +'/starred').catch(err => { 
       throw new Error(err.message); 
      }).subscribe(starred_res => { 
       //So we set the starred_list 
       res.starred_list = starred_res 
      }) 
     } 
    }) 

おかげで...

答えて

0

あるので、それは、--result IDが間違ってハードコードさんしてみてくださいすべてのユーザーのリスト

最も簡単な方法は、すべてのスター付きリストを取得してと一致させることです。結果はです。

// Get users 
this.MyService.getList().subscribe((results: any[]) => { 

    const url = 'https://api.github.com/users/'; 

    // Create requests to get starred list for every user 
    const starredRequests = results.map(
    res => this.http.get('https://api.github.com/users/' + res.login + '/starred') 
); 

    // Wait when all starred requests done and map them with results array 
    Observable.forkJoin(starredRequests).subscribe(starred => { 

    results.forEach((res, index) => { 
     res.starred_list = starred[index]; 
    }); 

    console.log(results); 
    }); 

}); 
+0

ありがとうございます。これは問題なく動作します。だから、私は常に "ネストされたリクエスト"を持って、 "forkJoin"を実行し、この "リストのインデックス"を確保する必要がありますか? もう1つの質問は、「非同期要求」をどのようにしてリストの1つの要素に反映できるかです。したがって、私はFacebookのポストから「好き」の価値を得たいと仮定し、この結果を事前にロードする必要はなく、いつでも答えることができ、この結果で、この値を特定のアイテムに入れたい私のリストの。 – user3854612

+1

"forkJoin"の一般的な使い方は、複数のHTTPリクエストに参加することです。すべての項目に対して「非同期要求」を実行する場合は、「mergeMap」演算子を使用できます。 –

関連する問題