2017-01-09 124 views
1

我有一個假日列表,每個假日都附帶一個用戶標識。我想將檢索到的用戶數據合併到每個節假日記錄中,以便返回單個可觀察節點。如何合併屬於另一個可觀察對象的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

回答

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

我已更新問題以顯示假期是fireBaseListObservable。如果我用fireBaseListObservable flatMap(或rxjs5中的mergeMap)替換swtich map,給userIdKey上的typecript alert'屬性不存在type any',這是導致問題的原因。爲什麼不在數組上進行firebase映射? – Mangopop

+0

這取決於你如何輸入你的對象,你可以嘗試下面的'$ {item [「userIdKey」]}' - 如果可行,那麼在某些地方使用或錯誤地設置類型是個問題,但是很難說沒有看到更多的代碼,因爲在你提供的代碼中,你根本沒有設置任何類型 – olsn

+0

我會做一個蹲點,看這個空間! – Mangopop

相關問題