无法将数据绑定到列表

时间:2018-06-02 06:44:49

标签: javascript firebase observable

我正在我的项目中实现聊天功能,并且已经使用了聊天library,并且作为聊天数据库,我使用的是Firebase实时数据库。 有两种方法:一种是getMessageHistory() [用于获取用户消息的消息历史记录],另一种是getMessageHistoryFromFirebase() [用于从FIREBASE获取用户消息的消息历史 - 时间数据库]

问题:当我在getMessageHistoryFromFirebase()中调用getMessageHistory()方法时,它会被调用,但会被调用很晚,并且父方法的当前执行已达到结束。

如何从firebase获取数据(通过getMessageHistoryFromFirebase()方法),然后用firebase数据库填充mockedHistory数组? 即使我知道方法早期被调用,并且在初始化时当前列表为空:

每一个回复都将受到高度赞赏!

班级档案:

父方法:

    getMessageHistory(userId: any): Observable<Message[]> {
    let firebaseMessages = this.getMessageHistoryFromFirebase(userId);

    let mockedHistory: Array<Message>;

    mockedHistory = firebaseMessages;

    // mockedHistory = [
    //     {
    //         fromId: userId,
    //         toId: userId,
    //         message: "Hi there, just type any message bellow to test this Angular module."
    //     }
    // ];

    return Observable.of(mockedHistory);
}

儿童方法:

getMessageHistoryFromFirebase(farmerId) : any{
    let chatMessages  = [];
    var chats;

    var database = firebase.database();
    firebase.database()
    .ref('/' + this.chatUrl + '/' + farmerId + '/')
    .once('value', function (snapshot) {
    chats = snapshot.val();
    if (chats != null) {
    Object.keys(chats).forEach(element => {
      let chat = chats[element.toString()];

      var Message = {
        fromId : chat.from,
        toId:chat.to,
        message: chat.message
      }

      chatMessages.push(Message)
    });

  }
 });
return chatMessages;
}

如果我在for循环的帮助下在列表中添加了一些元素但没有承诺,那么它可以正常工作。

0 个答案:

没有答案