我是新来的角2,并希望做一个调用依赖于下一个调用的嵌套http调用。我的代码是在服务如下:在angular2 rxjs嵌套的http调用
getUserPosts(): Observable<any[]>{
return this.http.get(this.apiUserURL + this.userId + '/')
.map((response: Response) => response.json())
.flatMap((users) => {
return Observable.forkJoin(
users.map(user=>
this.http.get(this.apiUserPostURL + user.id)
.flatMap(response => response.json())
)
)
})
}
在组件中我有:
ngOnInit() {
this.results = this.postsService.getUserPosts()
.subscribe(posts => { this.posts = posts
console.log(posts);
})
}
当我这样做,我得到的每一个用户的最后一个职位,但并不是所有的帖子。 (我有3个职位为每个用户,我有我的数据库中有两个用户,但低于我得到每个用户只有一个职位:
(2)[对象,对象] 0:对象 1:对象
解决方案预计:得到这样所有用户的所有帖子: (6)对象,对象,对象,对象,目标,对象]
当我我服务的最后部分更改为以下:
users.map(user=>
this.http.get(this.apiUserPostURL + user.id)
.map(response => response.json())
)
我得到的各3个职位两个阵列,我不知道如何访问这些职位与* ngFor:
(2)[阵列(3),阵列(3)] 0:阵列(3 ) 0:对象 1:对象 2:对象 1:阵列(3) 0:对象 1:对象 2:对象
解预期:直接与阵列而无需一个阵列,而是一个包含所有对象的数组: (6)[Object,Object,Object,Object,对象,对象]
我甚至尝试做别的事情至极我想将加入.flatMap到我的组件帮助如下:
ngOnInit() {
this.results = this.postsService.getUserPosts()
.flatMap(posts => this.posts = posts)
.subscribe(posts => { this.posts = posts
console.log(posts);
})
}
,但我有两个单独的阵列,每个阵列都与每个用户的所有帖子相关联,* ng仅挑选最新用户并忽略其他用户的其他帖子:
(3)[Object,Object,Object] 0:Object 1:对象 2:对象 (3)[对象,对象,对象] 0:对象 1:对象 2:对象
解预期:两个阵列合并成一个阵列: (6 )[对象,对象,对象,对象,对象,对象]
任何人都可以请求帮忙弄清楚如何解决这个问题? 非常感谢!
尝试在这里使用的地图,而不是flatMap:this.http.get(this.apiUserPostURL + user.id).MAP(响应=> response.json ()) –
@Julia Passynkova我在我上面的帖子的第二部分做了这个,我没有得到所需的解决方案。任何其他建议? – Hamid
使用.flatMap((users)=> {...])。map(x => [] .concat.apply([],x)) –