【发布时间】:2017-02-03 21:47:16
【问题描述】:
从'./Users/edwardhung/Desktop/timesheet-web-app/timesheet-web-app-new/src/app/services/user.service'导入{UserService}; 我正在使用带有firebase的angular 2。目前我有以下函数,它需要一个 UID 去 firebase 中的一个分支来查找存储用户信息存储路径的数据。 当数据返回时,我创建了第二个请求以根据路径获取该数据。
来自 UserService.ts
getUserInformation(uid: string) {
return this.angularFire.database.object('/pathForUid/' + uid).map(results => {
return this.angularFire.database.object('/' + results.path)
});
}
这就是我调用函数的方式
this.userService.getUserInformation(data.uid)
.subscribe(result => {
result.subscribe(res => {
let user: User = res;
this.userService.setCurrentUser(user);
})
});
这里一切正常,除了我发现这个语法有点奇怪,两个返回和两个订阅。 当我在 Swift 中编码时,它只是在回调中进行回调,而无需返回两次或订阅两次。
这是执行此操作的唯一且正确的方法,还是有其他语法,我不必订阅两次? 对我来说,在我调用函数的地方有两个订阅真的没有意义。我在想也许有一种方法可以执行以下操作
this.userService.getUserInfoInOneGoWithId(data.uid)
.subscribe(result => {
let user: User = result;
});
【问题讨论】:
-
看起来你想要链接两个 observables,这通常使用 .mergeMap() 操作符来完成。语法类似于
obs1.mergeMap(obs2),其中obs2可以使用obs1返回的数据,并使用常用运算符继续转换结果。在此处查看示例:stackoverflow.com/a/42021832/1153681
标签: angular typescript observable