【问题标题】:How to detect when Firebase servercall is DONE如何检测 Firebase 服务器调用何时完成
【发布时间】:2026-01-13 21:45:01
【问题描述】:

我正在使用 Google Firebase 将数据加载到我的应用中。我正在做一个初始加载,获取最后 40 条聊天消息,如下所示:

firebase.database().ref('/messages').limitToLast(40).once('value', function(messages) {
    traverseMessages(messages.val());
});

然后遍历:

// traverse messages function
function traverseMessages(obj) {
   for (var prop in obj) {
      var message = obj[prop].message;
      var chatUser = obj[prop].username;

      // populate function with data
      createChatElements(chatUser, message);
   };
};

创建 HTML 元素:

// build html for chat elements
function createChatElements(chatUser, message) {

    // build HTML
    var chatHTML = '<div class="chat-message">';
    chatHTML += '<h5 class="chat-message-username">' + chatUser +     '</h5>';
    chatHTML += '<p class="chat-message-message">' + message + '</p>';
    chatHTML += '</div>';

    // function to append chat
    appendChatToStaging(chatHTML);
};

元素附加到&lt;div class="chat-staging"&gt;&lt;/div&gt;

添加完所有消息后,我想用函数触发事件。

但我似乎无法弄清楚如何检测是否所有消息都已附加,因为我不知道数据库中有多少消息。有时不到40个。

所以我想:检测对服务器的调用何时完成以及检索了多少消息。但是怎么做?!

【问题讨论】:

  • 嗨,贾巴,如果我的回答对您有帮助或者您仍有任何疑问,请告诉我。谢谢。
  • 嗨,它并没有真正起作用。得到奇怪的结果。也许是因为我自己乱七八糟的代码。我现在想出了另一种方法:) 谢谢你和我一起思考!

标签: javascript firebase firebase-realtime-database


【解决方案1】:

当您拨打 traverseMessages 时,来自 firebase 的呼叫已经结束。因此,如果您想在附加所有数据后立即调用某些内容,您可以在 traverseMessages 中的 for 循环之后立即调用。

此外,如果您想知道 firebase 返回了多少对象,您可以使用以下方法:

Object.keys(messages.val()).length

【讨论】: