2016-06-27 6 views
2

Google Firebase를 사용하여 내 앱에 데이터를로드하고 있습니다.Firebase servercall이 DONE 일 때를 감지하는 방법

// 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>에 추가됩니다 : 다음 트래버스

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 요소 그래서 같은 지난 40 채팅 메시지를 취득하는 초기로드를하고있는 중이 야

모든 메시지가 추가되면 이브를 트리거하고 싶습니다. 기능이있는 NT.

그러나 데이터베이스에 얼마나 많은 메시지가 있는지 모르기 때문에 메시지를 모두 감지하는 방법을 알아낼 수 없습니다. 때로는 40 미만입니다.

그래서 다음과 같이하고 싶습니다. 서버 호출이 완료되고 검색된 메시지 수를 감지합니다. 하지만 어떻게?!

+0

헤이 자바 더, 내 대답은 도움이 있다면 알려주세요 또는 당신은 여전히 ​​의심이있는 경우. 감사. – adolfosrs

+0

안녕하세요. 실제로 작동하지 않았습니다. 이상한 결과가 나타났습니다. 내 지저분한 코드 때문일 수도 있습니다. 나는 지금 그것을 다른 방법으로 이해했다 :) 나와 함께 생각해 줘서 고마워! –

답변

1

traverseMessages으로 전화를 걸면 firebase의 호출이 이미 완료되었습니다. 따라서 모든 데이터를 추가 한 직후에 무언가를 호출하려면 for 루프가 traverseMessages에있는 직후에 수행 할 수 있습니다. 또한

, 당신은 중포 기지 다음으로 갈 수 반환 얼마나 많은 개체를 알고 싶다면 :

Object.keys(messages.val()).length 
관련 문제