我有一个假期列表,每个假期都附有一个用户ID。我想将检索到的用户数据合并到每个假日记录中,以便返回单个observable。
我创建了这个功能
getAllHolidaysAndUsers() {
return this.af.database.list('Holiday').mergeMap(items => {
for (let item of items) {
item.user = this.af.database.object(`/User/${item.userIdKey}`);
}
return items;
});
}
它返回一个像这样的对象
{
fromDate:'20/12/16',
toDate:'21/12/16',
user:fireBaseObservable
}
我想要一个这样的对象
{
fromDate:'20/12/16',
toDate:'21/12/16',
user:Array[1]
}
我正在努力在单个订阅中访问user
observable。目前我正在做嵌套订阅,我知道这是一种糟糕的形式。
我设法得到了一个类似的例子
getHolidayInfo() {
return this.getHolidaysByUserId().mergeMap(hol => {
return this.UserList.getUserByEmail().map(user => {
return {hol:hol.date, user:user[0]}
});
});
但是因为我必须在第一个例子中循环items
它只返回最后一个结果,所以这种技术不起作用
答案 0 :(得分:0)
你可以这样做:
getAllHolidaysAndUsers() {
return this.holiday
.switchMap(items => Observable.from(items))
.flatMap(item => {
return this.af.database.object(`/User/${item.userIdKey}`)
.map(user => {
item.user = user;
return item;
});
})
.toArray();
}