Typescript 使用嵌套调用从不同节点加载Firebase数据库数据,以使用angularfire生成一个可观察的结果
我想用angularfire加载ID列表中的所有成员。以下是我的Firebase实时数据库中的数据结构:Typescript 使用嵌套调用从不同节点加载Firebase数据库数据,以使用angularfire生成一个可观察的结果,typescript,firebase-realtime-database,rxjs,observable,angularfire,Typescript,Firebase Realtime Database,Rxjs,Observable,Angularfire,我想用angularfire加载ID列表中的所有成员。以下是我的Firebase实时数据库中的数据结构: { "groups" : { "-MVaXxyb-r1fMRwC8GWT" : { "name" : "Group1", "members" : { "-MVaXy2bcfEzckPyPGN4" : true,
{
"groups" : {
"-MVaXxyb-r1fMRwC8GWT" : {
"name" : "Group1",
"members" : {
"-MVaXy2bcfEzckPyPGN4" : true,
"-MVaY5cYGFgwE-2wnENS" : true
}
}
},
"members" : {
"-MVaXy2bcfEzckPyPGN4" : {
"name" : "Mike"
//... other Attributes
},
"-MVaY5cYGFgwE-2wnENS" : {
"name" : "Frank"
//...
}
}
}
首先我必须加载所有成员Id(来自组),然后我必须加载每个Id和成员详细信息。如何使用angularfire通过一个嵌套调用接收所有成员(可观察)?
这是我的密码:
public retrieveMembers(groupId: string): Observable<Observable<Member>[]> //--> should return Observable<Member[]>
return this.db
.list<string>(REF_GROUPS + "/" + groupId + "/" + REF_MEMBERS)
.snapshotChanges()
.pipe(
map((snapshotActions: SnapshotAction<string>[]) => {
return snapshotActions.map((snapshotAction: SnapshotAction<string>) => {
return this.retrieveMember(snapshotAction.key)
});
})
)
}
private retrieveMember(memberId: string): Observable<Member> {
return this.db
.object<Member>(REF_MEMBERS + "/" + memberId)
.valueChanges()
.pipe(
map((member: Member) => {
member.id = memberId;
return member;
})
);
}
class Member {
id: string;
name: string;
//other Attributes
}
public retrieveMembers(groupId:string):Observable/-->应返回Observable
返回这个.db
.list(REF_组+“/”+groupId+“/”+REF_成员)
.snapshotChanges()
.烟斗(
映射((快照操作:快照操作[]))=>{
返回snapshotActions.map((snapshotAction:snapshotAction)=>{
返回此.retrieveMember(snapshotAction.key)
});
})
)
}
private retrieveMember(memberId:string):可观察{
返回这个.db
.object(参考成员+“/”+memberId)
.valueChanges()
.烟斗(
地图((成员:成员)=>{
member.id=memberId;
返回成员;
})
);
}
班级成员{
id:字符串;
名称:字符串;
//其他属性
}
我不想返回一个可观察的可观察的,而是可观察的。-->因此,我可以在我的模板中的异步管道中使用这个可观察的
解决此问题的最佳方法是什么?可以在此处找到一种可能的解决方案: