【问题标题】:Firebase push() method shuffle the list dataFirebase push() 方法打乱列表数据
【发布时间】:2017-07-21 06:48:13
【问题描述】:

已经创建了一个聊天应用程序,我们使用 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);  

};

【问题讨论】:

  • 请提供您的相关代码和数据结构,否则无法诊断。具体来说,您是如何编写、查询和显示回复的。
  • 嗨,Travis Christian...正如我之前所说,它有时不会经常发生,这就是为什么我无法弄清楚这个问题

标签: javascript firebase firebase-realtime-database


【解决方案1】:

不要将 Date 用于远程数据。它会在每台机器上略微偏移。 Use ServerValue.TIMESTAMP 写入数据时 Firebase 将转换为服务器的 Unix 纪元时间。这确保了客户之间订单的一致性。

您没有提供有关如何阅读或显示聊天消息的任何代码,但由于您尝试按时间顺序显示它们,我假设您的查询使用orderBy("timestamp")。如果您在编写消息时使用ServerValue.TIMESTAMP,将保证按照写入数据库的顺序排序。

【讨论】:

  • 虽然听起来很疯狂,但我也不会为此使用 TIMESTAMP。在 Firetalk,我们(我)在大容量实时聊天中看到了一两个时间戳可能相交的案例。这似乎不太可能,但绝对不是不可能。 Firebase 的自动生成 ID 通常是此处排序的最佳选择。它是专门为此目的而设计的。
  • 嗨,Chad Robinson,我使用 orderByKey()。这是代码 var loadChatMessages = function(){ var chatMsgRef = db.child('chatMessages').child("gr1").child("ch_usr1_usr2"); $scope.chatMessages = chatMsgRef.orderByKey().limitToLast(50); };
  • @ChadRobinson 谢谢你,我不确定按键在语义上是否按照严格的时间顺序排列,因为我的数据库中有一些旧项目显示在集合的底部,尽管字母数字较少.这只是 SDK 升级的产物吗?
  • @GauravPriyadarshi 如果这不能解决您的问题,edit your question 包括相关代码和您的数据样本。
  • @TravisChristian Firebase 文档说 When working with lists of data push() ensures a unique and chronological key. 抱歉,我对旧 SDK 版本没有太多经验,这可能是真的,但至少对于最新的实现,这是他们的官方立场。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2012-04-03
  • 2011-06-04
  • 2010-11-01
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多