根据标题,我使用database.object
方法从Firebase检索成员的个人资料,并在Angular 4应用的个人资料视图控制器中订阅。
目前,我可以很好地获取所有这些个人资料信息,并且数据在我的Firebase控制器中发生变异。
对于某些背景:
以下是我正在做的事情的简化示例:
firebase.controller.ts
public getMemberProfile(id: string): Observable < IProfile > {
return this.database.object(`${MEMBERS_PATH}/${id}`).map(member => this.transformMember(member))
}
public getAdminUser(id: string): Observable < IUser > {
return this.database.object(`${USERS_PATH}/${id}`).map(user => user)
}
private transformMember(member): IProfile {
return {
aboutUserObj: this.getAdminUser(member.adminUserId).subscribe((adminUser)=> {
return adminUser // Of course this does NOT work
}),
// Other stuff
}
}
profile.controller.ts
this.memberFirebase.getMemberProfile(this.id).subscribe((profile) => {
this.profile = profile
})
正如您可以从减少的案例中看到的那样,我加载成员是先决条件,然后使用成员对象获取我需要的管理员用户所需的ID,以便列出此配置文件的更新。观点。
问题
如何成功加载该成员,然后从Firebase中随后添加其他用户信息,以便将所有这些信息作为一个包含完整变异配置文件的observable返回?
我特别想知道什么是最佳实践&#39;可能看起来像这种情况。
提前致谢!我希望这很清楚,如果没有,请随意提出改进建议。
答案 0 :(得分:1)
你想要像flatMap这样的东西,你可以链接observables
this.getMemberProfile(id).flatMap(
res => {
// get id from res of first observable
let adminId = res.id;
return this.getAdminUser(adminId);
}
)
.map(res => {
// do other transformation as needed
return res;
})
然后你会订阅这个链式可观察序列。
这是flatMap https://coryrylan.com/blog/angular-multiple-http-requests-with-rxjs
上的一个很好的资源