我有一些基本逻辑问题。我有一个带有团队字段和其他(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钩子上调用了动作,我也没有任何数据
请帮助
答案 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();