我正在构建一个聊天应用程序,并且当新的message
被添加到列表中时,我需要更新包含message
列表的chat
项目。Javascript Observable无限循环
我正在使用AngularFire2,并有一个Observable
。这Observable
完美工作以按预期动态维护列表。然而,我却有一个难题。当列表发生变化时,我需要执行一个update
,这又会导致列表发生更改,从而导致无限循环。
代码:
以下为Observable
findMessages(chatItem: any): Observable<any[]> {
return this.af.database.list('/message/', {
query: {
orderByChild: 'negativtimestamp'
}
}).map(items => {
const filtered = items.filter(
item => ((item.memberId1 === chatItem.memberId1 && item.memberId2 === chatItem.memberId2)
|| (item.memberId1 === chatItem.memberId2 && item.memberId2 === chatItem.memberId1))
);
return filtered;
});
}
我填充列表与此Observable
findAllMessages(chatItem: any): Promise<any> {
return this.firebaseDataService.findMessages(chatItem).forEach(firebaseItems => {
chatItem.lastMsg_text = 'updated value';
this.firebaseDataService.updateChat(chatItem);
});
}
正如你所看到的,我更新chatItem
updateChat(chatItem: any): firebase.Promise<void> {
return this.findChat(chatItem).forEach((chatItems: any[]) => {
if (chatItems.length > 0) {
for (let i: number = 0; i < chatItems.length; i++) {
return this.af.database.object('/chat/' + chatItems[i].$key).update({
timestamp: chatItem.timestamp,
negativtimestamp: chatItem.negativtimestamp,
lastMsg_text: chatItem.lastMsg_text,
lastMsg_read1: chatItem.lastMsg_read1,
lastMsg_read2: chatItem.lastMsg_read2
});
}
} else {
this.createChatFromItem(chatItem);
}
});
}
问题
这里我的困惑,是我更新chats
,而不是messages
,那么为什么messages
Observable
被触发?有没有办法实现这个避免无限循环?
任何帮助表示赞赏。