3
試圖執行是應該下面的代碼:使用rxjs withLatestFrom功能
- 檢索用戶
- 的所有聊天記錄的列表獲取最後的消息對所有這些聊天
- 檢索收件人對於所有這些聊天
全部合併在一起作爲一個數組信息,其中每個項目是聊天的組合,最後的消息和接收者信息
個this.msgService.getUserChatList(this.uid).do((chats) => { this.chats = []; if (!(chats.length > 0)) this.loading = false; this.getLastMessages$ = this.getLastMessagesForChats(chats); this.getRecipients$ = this.getRecipientsForChats(chats); }).switchMap(chats => Observable.from(chats)).withLatestFrom( this.getLastMessages$, this.getRecipients$, (chat, lastMessages, recipients) => ({ chat: chat, last: lastMessages[chat['id']], recipient: recipients[chat['id']] }) ).subscribe(chats => { console.log('chats ', chats); this.chats.push(chats); this.loading = false; });
附加功能
getLastMessagesForChats(chats: any): Observable<any[]> {
let lastMessages$ = [];
for (let chat of chats) {
let obs = this.msgService.getLastMessage(chat.id)
.map(last => ({chat: chat.id, last: last}));
lastMessages$[chat.id] = obs;
}
return Observable.from(lastMessages$).merge().toArray();
}
getRecipientsForChats(chats: any): Observable<any[]> {
let recipients$ = [];
for (let chat of chats) {
let obs = this.userService.getUserPublicInfo(chat.recipient)
.map(recipient => ({chat: chat.id, recipient: recipient}));
recipients$[chat.id] = obs;
}
return Observable.from(recipients$).merge().toArray();
}
我收到以下錯誤
Uncaught (in promise): TypeError: Cannot read property 'subscribe' of undefined
TypeError: Cannot read property 'subscribe' of undefined
我找不到什麼錯誤......我想在下面的JSBIN
重現有什麼想法?
我真的試圖初始化getLastMessages $和$ getRecipients用下面的代碼'this.getLastMessages $ =新的可觀察(); this.getRecipients $ = new Observable ();'但問題依然如此。任何想法如何我能設法使這項工作? –
@ManuelRODRIGUEZ看到我的更新,這顯然不會產生你想要的結果,但你可以看到它的工作 – martin
你沒有更多的錯誤,謝謝,但我不明白爲什麼'withLatestFrom'調用產生未定義。任何想法? –