最佳实践:嵌套订阅以接收用户数据?

时间:2017-03-15 10:45:09

标签: javascript angular firebase ionic2 angularfire2

我正在开发一个使用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 => {
       ...
   }
}

但是,它有两种嵌套订阅的感觉并不合适。你们怎么处理这个?什么是最佳实践方法"这里吗?

1 个答案:

答案 0 :(得分:0)

这可以通过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用于避免嵌套订阅,其余内容是您的应用专用逻辑。