從'./Users/edwardhung/Desktop/timesheet-web-app/timesheet-web-app-new/src/app/services/user.service'導入{UserService}; 我使用的角2與firebase。目前我有以下功能,需要一個UID去firebase中的一個分支來查找存儲用戶信息存儲路徑的數據。 當數據返回時,我創建了第二個請求並根據路徑獲取數據。Angular 2可觀察的備選語法
從UserService.tsgetUserInformation(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;
});
看起來像你想**鏈**兩個observable,這通常與[.mergeM ap()](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-mergeMap)運算符。語法類似於'obs1.mergeMap(obs2)',其中'obs2'可以使用'obs1'返回的數據,並繼續使用通常的操作符來轉換結果。看看這裏的例子:http://stackoverflow.com/a/42021832/1153681 – AngularChef