Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 使用嵌套调用从不同节点加载Firebase数据库数据,以使用angularfire生成一个可观察的结果_Typescript_Firebase Realtime Database_Rxjs_Observable_Angularfire - Fatal编程技术网

Typescript 使用嵌套调用从不同节点加载Firebase数据库数据,以使用angularfire生成一个可观察的结果

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,

我想用angularfire加载ID列表中的所有成员。以下是我的Firebase实时数据库中的数据结构:

{
  "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:字符串;
名称:字符串;
//其他属性
}
我不想返回一个可观察的可观察的,而是可观察的。-->因此,我可以在我的模板中的异步管道中使用这个可观察的


解决此问题的最佳方法是什么?

可以在此处找到一种可能的解决方案: