Невозможно подписаться после forkjoin

#javascript #angular #firebase #google-cloud-firestore #angularfire2

#javascript #угловой #firebase #google-облако-firestore #angularfire2

Вопрос:

Я хочу выполнить некоторую операцию firebase внутри цикла в angular. Когда я отправляю HTTP-запрос в firebase, он возвращает массив наблюдаемых, поэтому с помощью forkjoin я преобразую этот массив наблюдаемых в отдельные наблюдаемые. Теперь проблема в том, что когда я подписываюсь на эти новые наблюдаемые, я ничего не получаю

   get_student_email() {
    this.get_project_service
      .get_project_by_doc_id(this.batchID, this.projectID)
      .subscribe((res) => {
        this.response = res;
        this.email = this.response.student;
        let data = this.email.map((email) =>
          this.get_student_service.get_student_by_email_id(email)
        );
        let info = forkJoin([data]);
        console.log('info:', info);
        info.subscribe((res) => {
          console.log(res);
          console.log('Execute');
        });
      });
  }

Output:info: Observable {_isScalar: false, _subscribe: ƒ}
  

Я тоже пробую это. На этот раз он снова возвращает наблюдаемые

  let data = this.email.map((email) =>
          this.get_student_service.get_student_by_email_id(email)
        );

        let info = forkJoin([data]);
        console.log('info:', info);
        info.subscribe((res) => {
          console.log(res);
          console.log('Execute');
        });
      });

Output:-
info: Observable {_isScalar: false, _subscribe: ƒ}
[Observable]
Execute
  

Вот мой сервис

   get_student_by_email_id(email) {
    return this.fire_store
      .collection('User', (ref) => ref.where('email', '==', email))
      .valueChanges();
  }

  

Я не знаю, в чем основная причина этой проблемы. Я хочу, чтобы после завершения цикла его выполнение возвращало один объект массива, содержащий информацию обо всех пользователях, которые принадлежат этому массиву email (this.email)

Комментарии:

1. Кажется, у вас есть наблюдаемые внутри наблюдаемых. Пожалуйста, покажите, что именно this.email и что this.get_student_service.get_student_by_email_id() возвращает функция.

2. Проверьте, теперь эта функция возвращает информацию о пользователе

Ответ №1:

Проблема в коде forkJoin([data]) .

Ваш data it уже представляет собой массив наблюдаемых, поэтому вы просто передаете его forkJoin следующим образом: forkJoin(data) .

Комментарии:

1. Нет, в то время мой блок подписчиков ничего не печатает