0
考慮下面的代碼:取消先前的內觀測量當一個新的更高階的可觀察被髮射
this.msgService.getUserChatList()
.do((list) => {
this.unread = false;
console.log(list);
})
.mergeMap(chats => Observable.from(chats))
.mergeMap(chat => this.msgService.getLastMessage(chat['id']).map(lastMessage => this.containsUnreadMessages(lastMessage, chat['lastPresence'])))
.filter(state => state === true)
.subscribe((unread) => {
this.unread = true;
console.log('result ', res);
});
getUserChatList(): - 發射元件的每個時間聊天中的一個改變 - 一個元素是一個從未完成
getLastMessage() - 包含所有聊天的元數據 原始數組: - 是可觀察到的,從來沒有完成
在SE cond mergeMap我正在調用函數getLastMessage()。 我需要觀察這個可觀察的,直到 getUserChatList()發出一個新項目,否則我會對同一個聊天的最後一個消息進行多次觀察。
插圖:
getUserChatList
發射:[chatMetaA:{},chatMetaB:{}]- 代碼經過
getLastMessage
,開始觀察lastMessage飯店Chata和chatB 的聊天變化
- 一個所以包含聊天元數據的新版本
getUserChatList
發出新項目:[chatMetaA:{},chatMetaB:{}] - 代碼通過
getLastMessage
並開始觀察chatA和chatB的lastMessage。所以我們現在看到的飯店Chata和chatB
兩次最後消息,它會繼續下去......
我的問題是,我怎麼能取消觀察上getLastMessage()一次新產品由getUserChatList()發出?我試着用開關,但無法管理,使其工作
使用'switchMap'運營商 – martin
@馬丁,如果我用它代替第一mergeMap然後什麼更改(我的問題仍然存在),如果我使用它而不是第二個mergeMap,那麼我的代碼只執行我的數組的最後一項,這不是我想要的 –