有没有更好的方法来实现这一目标(让所有用户获得他们的照片):
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 :(得分: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)
,因此您可以访问这两个,并可以根据需要将它们合并在一起。