Angular - 迭代的嵌套API调用

时间:2017-07-17 11:57:51

标签: angular ionic-framework rxjs

有没有更好的方法来实现这一目标(让所有用户获得他们的照片):

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?

感谢您的建议

于连

1 个答案:

答案 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),因此您可以访问这两个,并可以根据需要将它们合并在一起。