Impossibile iscriversi dopo forkjoin

Nov 19 2020

Voglio eseguire alcune operazioni Firebase all'interno di un loop in angular. Quando invio una richiesta HTTP a Firebase, restituisce un array di osservabili, quindi utilizzando forkjoin converto questo array di osservabili in singoli osservabili. Ora il problema è che quando mi abbono a questi nuovi osservabili non ho ricevuto nulla

  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: ƒ}

Provo anche questo. In questo momento restituisce di nuovo osservabili

 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

Ecco il mio servizio

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

Non so quale sia la ragione principale alla base di questo problema. Quello che voglio è che dopo che il ciclo abbia completato la sua esecuzione, restituisca un singolo oggetto array contenente informazioni su tutti gli utenti che appartengono a quell'array di posta elettronica (this.email)

Risposte

1 ThiagoBitencourt Nov 19 2020 at 09:50

Il problema è con il codice forkJoin([data]).

Il vostro dataè già una serie di caratteristiche osservabili, quindi basta passare a forkJoinquesto modo: forkJoin(data).