我正在开发一个使用 Firebase 作为后端的 Ionic 2 移动应用程序。使用 Firebase,一些身份验证数据会自动存储在 firebase 中(当前登录用户的 ID、电子邮件和密码)。其他用户数据(姓名、地址等)存储在我的 Firebase 数据库中。
要获取当前登录用户的数据,我必须先订阅 Firebase 的身份验证方法。使用 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 用于避免嵌套订阅,剩余的内容是您的应用特定逻辑。
关于javascript - 最佳实践 : Nested subscriptions to receive user data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42807465/