Angular Firestore-异步请求有问题吗?

时间:2019-01-09 00:20:27

标签: angular typescript firebase google-cloud-firestore angularfire2

我有一些基本逻辑问题。我有一个带有团队字段和其他(uid电子邮件等)的用户数据结构。另外,我在Firestore中拥有一个包含名称,描述和一组用户的团队数据结构。

我想做的是在应用程序初始化时从用户那里获取用户团队ID,然后获取团队,然后获取团队成员的用户个人资料。我编写了以下代码:

 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 :(得分:0)

您需要订阅可观察对象,以便它们开始运行。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();