Firebase Web:方法不会在child_added内部第一次触发

时间:2019-06-24 05:57:23

标签: javascript firebase firebase-realtime-database

我的项目中有聊天功能。当有人发送消息时,我使用push更新数据库。

然后定义一个名为renderChatUI的方法。

我这样定义一个侦听器:

firebase.database().ref(`USERS/${Database.getNestedData('UID')}/UserClass/${grade}/${subject}/Topics/${key}/Chats`).on('child_added', (snapshot) => {
  console.log('Hello');
  this.renderChatUI(UID, grade, subject, key);
})

因此,每当任何消息添加到此路径时,我的聊天UI都会重新呈现。

child_added代码块可以完美执行,但是renderChatUI()方法不会第一次触发(当我添加第一条消息时)。添加第二条消息时,聊天UI会重新显示第一条消息,添加第三条聊天UI会重新渲染第二条,以此类推...!

我不知道出了什么问题。感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

要允许child-added添加到数据库后触发,那么可以使用完成回调,例如:

 firebase.database().ref('users/' + userId).set({
    username: name,
    email: email,
    profile_picture : imageUrl
  }, function(error) {
    if (error) {
      // The write failed...
    } else {
      // Data saved successfully!
      firebase.database().ref(`USERS/${Database.getNestedData('UID')}/UserClass/${grade}/${subject}/Topics/${key}/Chats`).on('child_added', (snapshot) => {
         console.log('Hello');
         this.renderChatUI(UID, grade, subject, key);
       })
    }
  });
}

来自docs

  

将写入提交到数据库后调用的可选完成回调。如果调用失败,则会向回调函数传递一个错误对象,指示失败发生的原因。