如何合并属于另一个可观察对象的observable
问题描述:
我有一个假日列表,每个假日都附带一个用户标识。我想将检索到的用户数据合并到每个节假日记录中,以便返回单个可观察节点。如何合并属于另一个可观察对象的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
观察的对象在一个订阅。目前我正在做嵌套订阅,我知道这是不好的形式。
我已经得到了一个类似的例子是这样
getHolidayInfo() {
return this.getHolidaysByUserId().mergeMap(hol => {
return this.UserList.getUserByEmail().map(user => {
return {hol:hol.date, user:user[0]}
});
});
工作,但因为我通过items
在第一个例子中有循环它只返回最后的结果,所以这种技术不工作
答
你可以做这样的:
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();
}
我已更新问题以显示假期是fireBaseListObservable。如果我用fireBaseListObservable flatMap(或rxjs5中的mergeMap)替换swtich map,给userIdKey上的typecript alert'属性不存在type any',这是导致问题的原因。为什么不在数组上进行firebase映射? – Mangopop
这取决于你如何输入你的对象,你可以尝试下面的'$ {item [“userIdKey”]}' - 如果可行,那么在某些地方使用或错误地设置类型是个问题,但是很难说没有看到更多的代码,因为在你提供的代码中,你根本没有设置任何类型 – olsn
我会做一个蹲点,看这个空间! – Mangopop