如何合并属于另一个可观察对象的observable

如何合并属于另一个可观察对象的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在第一个例子中有循环它只返回最后的结果,所以这种技术不工作

Here's the plunker

你可以做这样的:

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(); 
} 
+0

我已更新问题以显示假期是fireBaseListObservable。如果我用fireBaseListObservable flatMap(或rxjs5中的mergeMap)替换swtich map,给userIdKey上的typecript alert'属性不存在type any',这是导致问题的原因。为什么不在数组上进行firebase映射? – Mangopop

+0

这取决于你如何输入你的对象,你可以尝试下面的'$ {item [“userIdKey”]}' - 如果可行,那么在某些地方使用或错误地设置类型是个问题,但是很难说没有看到更多的代码,因为在你提供的代码中,你根本没有设置任何类型 – olsn

+0

我会做一个蹲点,看这个空间! – Mangopop