我正在开发一个使用Firebase作为后端的Ionic 2移动应用程序。使用Firebase,一些身份验证数据会自动与firebase一起存储(当前记录在用户的ID,电子邮件和密码中)。其他用户数据(名称,地址,...)存储在我的Firebase数据库中。
要获取当前登录用户的数据,我必须首先订阅Firebase的auth方法。使用angularfire2我执行以下操作:
this.af.auth.subscribe(data => {
... // data.uid gives me the user's id
}
现在我知道了用户的ID,并且可以通过以下操作订阅我的Firebase数据库以获取其他用户数据:
this.af.database.object('/users/'+userId).subscribe( userData => {
...
}
如果我将它们组合在一起,它就是一个嵌套订阅,如下所示:
this.af.auth.subscribe(data => {
this.af.database.object('/users/'+user.uid).subscribe( userData => {
...
}
}
但是,这样做有两个嵌套订阅感觉不对。你们怎么处理这个?这里的“最佳实践方法”是什么?
这可以通过Rxjs mergeMap运算符完成
this.af.auth.subscribe(user=> {
this.af.database.object('/users/'+user.uid).subscribe( userData => {
...
}
}
至
this.af.auth.mergeMap(user=>this.af.database.object('/users/'+user.uid))
.subscribe(userData){
...
}
要回答您的问题,mergeMap用于避免嵌套订阅,剩余的东西是您的应用程序特定逻辑。