Использовать значения объекта из одной подписки в другой подписки - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь разработать функцию на форуме и хочу показать фотографию профиля пользователя, который задал вопрос. Я использую 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 голосов
/ 02 мая 2018

Существует две исходные наблюдаемые: из вопросов и из пользовательских данных, и последняя зависит от значений первых.

Приведенный ниже код сначала выравнивает наблюдаемый массив вопросов до наблюдаемых вопросов, затем он выбирает пользовательские данные из 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
}

Я не проверял этот код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...