使用firebase和Behaviorsuject问题聊天线程

时间:2016-03-28 06:17:28

标签: firebase angular rxjs

我是编程和学习新事物的新手, 所以我正在使用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
  }

那么我怎样才能将每个未在同一级别上取得的值分组,让最后一条消息刷新而不创建新对象并将其返回到我的模型中。

0 个答案:

没有答案
相关问题