我是编程和学习新事物的新手, 所以我正在使用observable,angular2和firebase为我的一个项目构建一个聊天线程,但我面临一些小问题。
请查看以下代码以获取更多信息。
loadmessagesForU(currentUser){
return new Observable((observer) => {
this.rootRef.child('users').child(currentUser).child('rooms').on('child_added', snapshot => {
this.key = snapshot.key()
this.rootRef.child('messages').child(this.key).on('value', snapshot => {
const data = snapshot.val()
const loto = _.toArray(data)
const last = _.last(loto)
this.rootRef.child('users').orderByKey().equalTo(last.sender).on('child_added', snapshot => {
observer.next({sendername: snapshot.val().nom, lastmessage: last.messages})
})
})
})
})
}
这是我采用每个值来构建我的线程的方式,我需要使用this.key,last.message,sender.name等来构建我的线程,我可以轻松地采用它们并使用它们但是它工作有一半,每次我有一个新的消息,它创建一个新的对象,而不是刷新最后一条消息,它不感觉我真正需要的东西,让事情更有序,并使用模型和Behaviorsubject来构建我的线程。
我最终得到了这段代码。
loadmessagesForU(currentUser){
const ThreadObservable = new BehaviorSubject<Thread[]>(null)
this.rootRef.child('users').child(currentUser).child('rooms').on('child_added', snapshot => {
this.key = snapshot.key()
this.rootRef.child('messages').child(this.key).on('value', snapshot => {
const data = snapshot.val()
const loto = _.toArray(data)
const last = _.last(loto)
this.rootRef.child('users').orderByKey().equalTo(last.sender).on('child_added', snapshot => {
MessagesObservable.next({sendername: snapshot.val().nom, lastmessage: last.messages})
})
})
})
return ThreadObservable
}
那么我怎样才能将每个未在同一级别上取得的值分组,让最后一条消息刷新而不创建新对象并将其返回到我的模型中。