我試圖創建一個將用戶數據作爲Observable並使用第一個observable的數據添加/合併數據的函數,然後返回所有這些數據作爲一個觀察的,我能做到這一點,但不能在嵌套的觀察到嵌套可觀察對象:將observable添加爲可觀察對象的屬性並展開它
這裏返回操作是返回一個可觀察與可觀察到作爲一個屬性叫做假期
getAllUsersWithHolidays() {
return this.users.map(items => {
for (let item of items) {
item.holiday = this.af.database.list('Holiday',
{
query: {
orderByChild: 'userIdKey',
equalTo: item.$key
}
}
)
}
return items;
});
}
問題的函數當我打電話時嘗試拔出假期中存儲的數據
this.summary$ = this.UserListService.getUserByEmail().mergeMap(user => { //get the user details to filter by team
return this.HolidayService.getAllUserWithHolidays().map(data => {
return data
.filter(team => team.team === user[0].team) //filters users by team
.map(item => { //map over combined data
return item.holiday
.map(hol => { // Hol is observable, build with property daysTaken
return {
firstname: item.firstname,
surname: item.surname,
holiday: hol.reduce((prev, curr) => {prev + curr.daysTaken, 0) //cannot access hol data
}
});
});
})
})
然後用異步解開
{{summary$ | async | json}}
當在節日期間觀察到的映射,似乎我無法訪問數據?也許是因爲我沒有訂閱?
我寧願沒有可觀察的性質從getAllUsersWithHolidays回來,我寧願計算它首先
所以不是該返回的項目,因爲這
{user: 'exampleName', holiday:fireBaseListObservable}
的我會回到它已經計算出
{ user:'exampleName' , holiday: 20 }
但這樣做也躲避我......
getAllUsersWithHolidays() {
return this.users.map(items => {
for (let item of items) {
item.holiday = this.af.database.list('Holiday',
{
query: {
orderByChild: 'userIdKey',
equalTo: item.$key
}
}
).reduce((prev, curr) => prev + curr.daysTaken, 0)
}
return items;
});
}
我以爲我可以這樣做,但這仍然返回一個可觀察的,當然我不能訂閱這裏,並返回任何東西,似乎從來沒有工作!
flatMap是你的朋友 –
flatMap是mergeMap只是另一個名字這在下面 –