Angular Firestore - проблема с асинхронными запросами? - PullRequest
0 голосов
/ 09 января 2019

У меня проблема с некоторой базовой логикой. У меня есть структура данных пользователя с полем команды и другие (UID электронной почты и т. Д.). Кроме того, у меня есть структура данных команды с именем, описанием и массивом пользователей в моем пожарном депо.

То, что я пытаюсь сделать, это в начале приложения получить идентификатор пользователя от пользователя, затем получить команду и затем получить профили пользователей членов группы. Я написал следующий код:

 ngAfterViewInit() {
    this.userRef.valueChanges().pipe(map( (data) => {
      console.log(data);
      this.teamRef = this.afs.doc<Team>(`teams/${data.teams[0]}`);
      console.log(this.teamRef);
      console.log('init');
      this.getTeam();
    }));
  }

  private getTeam(): void {
    this.teamRef.valueChanges().pipe(map( (teamData: Team) => {
      this.team = teamData;
      console.log('team');
     this.getMembers();
    }));
  }

  private getMembers(): void {
    console.log('members init');
    this.team.members.forEach((value) => {
      this.afs.doc<User>(`users/${value}`).valueChanges().pipe(map( (data: User) => {
        this.teamMembers.push(data);
      }));
    });
    console.log('members:');
    console.log(this.teamMembers);
  }

Мой пользовательский интерфейс выглядит так:

export interface User {
  email: string;
  uid: string;
  photoURL?: string;
  displayName?: string;
  teams?: string[]; // acutally only 1 team - field contains team doc id
}

Любой интерфейс моей команды:

export interface Team {
  name: string;
  description?: string;
  admin?: string; // = creator - first user
  members?: string[]; // array of users UIDs.
  boards?: string[]; // array of board docs id.
}

данные в базе данных firesotre верны ...

Я не знаю, что я делаю не так. Я не получаю никаких данных, даже если действия вызываются на хуке onInit

Пожалуйста, помогите

1 Ответ

0 голосов
/ 09 января 2019

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

 this.userRef.valueChanges().pipe(map( (data) => {
      console.log(data);
      this.teamRef = this.afs.doc<Team>('teams/${data.teams[0]}');
      console.log(this.teamRef);
      console.log('init');
      this.getTeam();
    })).subscribe();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...