如何始终如一地订阅 Observable? (RxJS)

how to consistently do subscribe Observable? (RxJS)

我运行遇到一个问题: 我需要先获取评论数据(针对用户),其次获取用户数据并将评论和用户相关联:

结构数据:

comment:
id,
date,
userId,
message

--------

user:
id,
name

我想获取评论并为每个评论添加用户名。 IE。我想让评论包含用户名:

comment:
id,
date,
userId,
message,
userName

我阅读了 rxjs 的文档,但由于各种运算符的丰富,我不知道哪种适合我。

我试试

//get comments
return this.getMovieComments(movieId).pipe(
      //form array ids users by comments
      mergeMap(comments => {
        const ids = comments.map(c => c.userId);
        //get users
        return this.userService.searchUsers({ id: ids });
      })
    ).subscribe((users) => { console.log(users) });

它是有效的,但我只是得到列表用户,我不知道如何关联来自 getMovieComments()searchUsers()[= 的数据29=] 然后得到想要的结果。

对不起,如果事情很明显。我是 RxJS 的初学者

在这一行

return this.userService.searchUsers({ id: ids });

您可以将它与 comments(您已经拥有)结合使用:

return forkJoin(of(comments), this.userService.searchUsers({ id: ids }));

一种方法如下

return this.getMovieComments(movieId).pipe(
  concatMap(comments => {
     const ids = comments.map(comment => comment.id);
     return this.userService.searchUsers({ id: ids }).pipe(
        // via this map operation we return both the comments and the users to the next operator in the pipe
        map(users => ({users, comments})
     )
  }),
  map(({users, comments}) => {
     // here users and comments are 2 arrays and so it is possible to assign the user name to the comment - the exact logic may depend on how the arrays are sorted
  })
)