Angular rxjs操作符,如何返回单个对象中的嵌套数据?
我找不到一种用rxjs方式获取嵌套数据的干净方法 有一个可观察的返回所有用户,一个可观察的返回给定用户id的所有帖子Angular rxjs操作符,如何返回单个对象中的嵌套数据?,angular,rxjs,Angular,Rxjs,我找不到一种用rxjs方式获取嵌套数据的干净方法 有一个可观察的返回所有用户,一个可观察的返回给定用户id的所有帖子 getUsers():可观察 及 getPosts(id:string):可观察 我如何返回用户列表,包括他们的帖子 目前,我使用2个嵌套订阅准备数据 nestedFetch(){ this.service.getUsers() .订阅( res=>{ res.forEach((用户)=>{ this.service.getPosts(user.Id).subscribe( 职位
getUsers():可观察
及
getPosts(id:string):可观察
我如何返回用户列表,包括他们的帖子
目前,我使用2个嵌套订阅准备数据
nestedFetch(){
this.service.getUsers()
.订阅(
res=>{
res.forEach((用户)=>{
this.service.getPosts(user.Id).subscribe(
职位=>{
user.posts=posts;
this.users.push(用户);
},
err=>console.log('出错:'+err)
)
})
},
err=>console.log('出错:'+err)
);
}
我宁愿使用这样的操作符。但是我怎样才能返回用户,包括他们的帖子呢
nestedFetch(){
此.service.getUsers()管道(
map(users=>users.map(u=>this.membership.getPosts(u.id)),
合并映射(posts=>forkJoin(posts))
).订阅(
res=>this.posts=posts,//只返回posts,不返回用户
err=>console.log('出错:'+err)
)
}
内部管道有助于通过用户的帖子扩展用户
this.service.getUsers().pipe(
switchMap(users => {
const postsRequests$ = this.users.map(user => this.service.getPosts(user.id).pipe(
// example for a error catch which would lead to an empty array not breaking the forkJoin
// catchError(err => of([])),
map(posts => ({ ...user, posts })),
));
return forkJoin(postsRequests$);
}),
).subscribe(/* ... */);
subscribe会捕获内部管道抛出的错误吗?@F.H.pipe只是将一个或多个curried函数链接在一起(自由点样式)。因此,您需要知道的是,当它是内部可观察错误时,是否有forkJoin()
错误。答案是肯定的。如果任何内部可观测错误,您永远不会从forkJoin
得到结果,只会得到错误。您还可以使用rxjscatchError
操作符处理错误,我扩展了我的答案看看这个答案:)