2017-07-17 196 views
1

呼籲有沒有更好的方式來實現這一目標(讓所有用戶都使用自己的照片):角 - 嵌套API與迭代

this.authHttp.get(this.ApiUrl+'users') 
.map(res => res.json()) 
    .subscribe(users => { 
     for (let user of users) { 
      this.authHttp.get(this.ApiUrl+'users/'+user.id+'/photos') 
      .map(res => res.json()) 
      .subscribe(photos => { 
       user['photos'] = photos; 
       this.items.push(user); 
      }) 
     } 
    }); 

也許使用mergeMap?

謝謝您的建議

朱利安

+0

是的,'MergeMap'在這裏是個好主意 –

+0

謝謝,問題是我找不到如何用mergeMap迭代用戶。 – bidou88

+0

你面臨的問題是什麼? –

回答

3

我假設res.json()是同步調用返回的JSON作爲對象,所以你可以鏈接就可以了:

this.authHttp.get(this.ApiUrl+'users') 
.mergeMap(res = res.json().users) 
.mergeMap(
    user => this.authHttp.get(this.ApiUrl+'users/'+user.id+'/photos'), 
    (user, photosRes) => { 
    user['photos'] = photosRes.json(); 
    return user; 
    } 
) 
.subscribe(user => this.items.push(user)); 

此代碼示例使用mergeMap超載,它需要mapFunc(outer,inner),因此您可以訪問它們,並且可以按照您認爲合適的方式將它們合併在一起。