私はチャットアプリケーションを構築していて、新しいmessage
がリストに追加されると、message
リストを含むchat
アイテムを更新する必要があります。Javascript可観測無限ループ
私はAngularFire2を使用しており、Observable
を持っています。このObservable
は、期待通りに動的にリストを動的に維持するために完全に機能します。
しかし、私は難解です。リストが変更されたら、update
を実行する必要があり、リストが変更され、の無限ループという結果になります。
コード:
次は、私はあなたが見ることができるように、私はchatItem
Observable
findAllMessages(chatItem: any): Promise<any> {
return this.firebaseDataService.findMessages(chatItem).forEach(firebaseItems => {
chatItem.lastMsg_text = 'updated value';
this.firebaseDataService.updateChat(chatItem);
});
}
でリストを作成する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;
});
}
ですここで0
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
がトリガされていることがありますか?無限ループを避けるためにこれを達成する方法はありますか?
助けてください。