在另一个订阅中使用来自一个订阅的对象值

时间:2018-05-02 08:50:39

标签: angular

我正在尝试在论坛中开发一项功能,并且我想显示提出问题的用户的个人资料图片。我使用mongodb作为我的数据库。为了实现我想要的,我需要从问题集合中订阅值并将userID字段传递给用户集合以获得所需的个人资料图片。我尝试使用循环并从question.userID传递值以从用户集合中获取用户。但它没有用。有人可以帮助我实现这一目标。我在下面发布了我的代码:

ngOnInit() {
  var j = 0;

  this.forumService.getQuestions().subscribe((data) => {
    this.questionData = data;

    for (var i = 0; i < data.length; i ++) {
      this.forumService.getUser(data[j].userID).subscribe((userData) => {
        console.log(userData);

        this.questionData[j].profilepicpath = userData[0].info.profilepicpath;
      })
    }

    console.log(this.questionData[j]);

    j ++;
  });

  this.userID = localStorage.getItem('sessionItem');
}

1 个答案:

答案 0 :(得分:0)

有两个源可观察源:问题和用户数据,后者取决于第一个的值。

下面的代码首先将可观察的问题数组的可观察性展平为可观察的问题,然后从getUser获取用户数据,返回包含所有问题数据和profilepicpath属性的对象,最后加入问题一系列问题。

ngOnInit(): void {
  this.forumService.getQuestions().pipe(
    mergeMap(question => question),
    switchMap(question => this.forumService.getUser(question.userID).pipe(
      map(user => ({
        ...question,
        profilepicpath: user.info.profilepicpath,
      })),
    )),
    toArray(),
  ) // subscribe here and unsubscribe on component destroy
}

我还没有测试过这段代码。