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

我正在开发一个使用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用于避免嵌套订阅,剩余的东西是您的应用程序特定逻辑.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...