我的项目中有聊天功能。当有人发送消息时,我使用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会重新渲染第二条,以此类推...!
我不知道出了什么问题。感谢您的帮助。
答案 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:
将写入提交到数据库后调用的可选完成回调。如果调用失败,则会向回调函数传递一个错误对象,指示失败发生的原因。