【发布时间】:2017-01-28 23:12:20
【问题描述】:
我正在使用 Angular2 开发一个项目,并尝试使用 RxJS 的功能(以及作为后端的 Firebase)构建大量高度动态的用户界面。
现在假设以下场景:
this.af.auth
.filter(Boolean)
.switchMap((auth) => this.af.database.object('/usersUid/' + auth.uid));
这将检查用户是否正确登录,如果是,则切换到内部 observable 以获取存储的用户信息(例如管理属性等)
这很好用(同时使用 subscribe() 和模板中的异步管道)。
让我感到困惑的是,当我试图将 observable 移动到专用服务并检索它时,它将返回 observable “包装”在一个数组中。
// in original component
let userObservable = this.databaseSrv.getUserObservable(); // the userObservable will be wrapped as an Array and the component logic breaks
// in database-service
getUserObservable(){
return this.af.auth
.filter(Boolean)
.switchMap((auth) => this.af.database.object('/usersUid/' + auth.uid));
}
我尝试了 map/flatmap/merge 的不同变体......我返回 observable 的方式肯定有问题,但我似乎无法理解它。
对此行为的任何解释将不胜感激。
【问题讨论】:
标签: angular observable rxjs5