我正在構建一個聊天應用程序,並且當新的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
被觸發?有沒有辦法實現這個避免無限循環?
任何幫助表示讚賞。