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,那么我的代码只执行我的数组的最后一项,这不是我想要的 –