2016-06-27 13 views
2

私はGoogle Firebaseを使用してアプリケーションにデータをロードしています。トラバースその後Firebase servercallが完了したことを検出する方法

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

:私はそうのような最後の40チャットメッセージを取得し、初期負荷をしています

// 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); 
}; 

要素が<div class="chat-staging"></div>に追加されます

すべてのメッセージが追加されたら、私はイブをトリガーしたい関数でnt。

しかし、どのように多くのメッセージがデータベースにあるのかわからないので、すべてのメッセージが追加されていることを検出する方法を考え出すことはできません。場合によっては40未満です。

私は次のようにしたいと考えています。サーバーへの呼び出しが完了したときと、取得されたメッセージの数を検出します。しかし、どのように!

+0

ねえジャバは、私の答えは参考になりました場合は、あなたはまだ疑問を持っているなら、私に知らせてください。ありがとう。 – adolfosrs

+0

こんにちは、それは実際には機能しませんでした。奇妙な結果を得ていた。たぶん私の厄介なコードのため。私は今別の方法を考え出した:)私と考えてくれてありがとう! –

答えて

1

traverseMessagesに電話すると、firebaseからのコールはすでに終了しています。したがって、すべてのデータを追加した直後に何かを呼びたい場合は、forループがtraverseMessagesの直後に実行できます。あなたはfirebaseでは、次に行くことができます返されたオブジェクトの数を知りたい場合

また、:

Object.keys(messages.val()).length 
関連する問題