创建了一个聊天应用程序,我们使用firebase进行实时通信。 有时我注意到push()方法将列表数据混乱。我们可以在下图中看到:
如果我们在上面的图片中看到我只是想与某人沟通,我说你好回复用户说嘿,我又说我需要一些帮助然后用户说这就是我在这里的目的。我可以在回复中为您提供哪些帮助?但如果我们在图片中看到用户回复首先出现。
间歇性地发生这就是为什么我没有弄清楚这个问题。所以请有人帮我解决我的错误。
var pushMessageToFB = function(){
var chatMsgRef = db.child("chatMessages").child("gr1").child("ch_usr1_usr2");
var message = {
type: "chat",
content: data.messageText,
timestamp: Date.now(),
by: user.id
};
chatMsgRef.push(message, function(err){
if (err){
console.log('error occurred while pushing message to fb : err ' + JSON.stringify(err));
}
});};
var loadChatMessages = function(){
var chatMsgRef = db.child('chatMessages').child("gr1").child("ch_usr1_usr2");
$scope.chatMessages = chatMsgRef.orderByKey().limitToLast(50);
};
答案 0 :(得分:2)
不要使用Date作为远程数据。每台计算机都会略微偏移。 Use ServerValue.TIMESTAMP
Firebase将在写入数据时将其转换为服务器的Unix纪元时间。这可确保客户之间订单的一致性。
您没有提供有关如何阅读或显示聊天消息的任何代码,但由于您尝试按时间顺序显示这些代码,我假设您的查询使用orderBy("timestamp")
。如果在编写消息时使用ServerValue.TIMESTAMP
,则可以保证按照写入数据库的顺序进行排序。