2017-07-17 150 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),因此您可以访问它们,并且可以按照您认为合适的方式将它们合并在一起。