javascript - 最佳实践 : Nested subscriptions to receive user data?

标签 javascript angular firebase ionic2 angularfire2

我正在开发一个使用 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/

相关文章:

angular - 在 Angular Material 中添加自定义颜色变量 (2+)

firebase - 用户在 Firebase 身份验证中导入

javascript - 使用正则表达式回车符转换为 <br></br> 替换 YouTube URL

Angular 6 : Uncaught (in promise): Error: StaticInjectorError(AppModule)[RoleGuardService]

angular - 将 ionic3 转换为 apk 构建

javascript - firebase的updateProfile是否返回Promise中的用户

android - 为什么我的Gradle无法在Unity Android Build上使用?

javascript - 使用jquery在鼠标悬停/悬停时放大图像

javascript - 计算一个值在数组中出现的次数 - javascript - Angular - lodash

javascript - 滚动时将 div 保持在顶部但保持边距