Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular rxjs操作符,如何返回单个对象中的嵌套数据?_Angular_Rxjs - Fatal编程技术网

Angular rxjs操作符,如何返回单个对象中的嵌套数据?

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( 职位

我找不到一种用rxjs方式获取嵌套数据的干净方法

有一个可观察的返回所有用户,一个可观察的返回给定用户id的所有帖子

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
得到结果,只会得到错误。您还可以使用rxjs
catchError
操作符处理错误,我扩展了我的答案看看这个答案:)