como descartar dados iniciais em um database do Firebase

Estou fazendo um aplicativo simples que informa a um cliente que outros clientes clicaram em um botão. Estou armazenando os cliques em um Firebase ( db ) usando:

 db.push({msg:data}); 

Todos os clientes são notificados sobre os cliques de outros usuários, como, por exemplo,

 db.on('child_added',function(snapshot) { var msg = snapshot.val().msg; }); 

No entanto, quando a primeira página é carregada, quero descartar todos os dados existentes na pilha. Minha estratégia é chamar db.once() antes de definir o db.on('child_added',...) para obter o número inicial de filhos e, em seguida, usá-lo para descartar esse número de chamadas para db.on('child_added',...) .

Infelizmente, no entanto, todas as chamadas para db.on (‘child_added’, …) estão acontecendo antes que eu consiga obter a contagem inicial, então ele falha.

Como posso efetivamente e simplesmente descartar os dados iniciais?

Se eu entendi sua pergunta corretamente, parece que você deseja apenas os dados que foram adicionados desde que o usuário visitou a página. No Firebase, o comportamento que você descreve é ​​por design, pois os dados estão sempre mudando e não há uma noção de dados “antigos” versus “novos” dados.

No entanto, se você quiser exibir apenas os dados adicionados após o carregamento da página, tente ignorar todos os events anteriores até que o conjunto completo de filhos seja carregado pelo menos uma vez. Por exemplo:

 var ignoreItems = true; var ref = new Firebase('https://.firebaseio.com'); ref.on('child_added', function(snapshot) { if (!ignoreItems) { var msg = snapshot.val().msg; // do something here } }); ref.once('value', function(snapshot) { ignoreItems = false; }); 

A alternativa para essa abordagem seria escrever seus novos itens com uma prioridade também, em que a prioridade é Firebase.ServerValue.TIMESTAMP (a hora atual do servidor) e, em seguida, usar uma .startAt(...) usando o registro de data e hora atual. . No entanto, isso é mais complexo do que a abordagem descrita acima.

Para conjuntos de dados maiores, o Firebase agora oferece (a partir de 2.0) alguns methods de consulta que podem simplificar isso.

Se adicionarmos um campo de registro de data e hora em cada registro, poderemos construir uma consulta que examine apenas os novos valores. Considere esses dados inventados:

 { "messages": { "$messageid": { "sender": "kato", "message": "hello world" "created": 123456 // Firebase.ServerValue.TIMESTAMP } } } 

Nós poderíamos encontrar mensagens somente depois de “now” usando algo assim:

 var ref = new Firebase('https://.firebaseio.com/messages'); var queryRef = ref.orderBy('created').startAt(Firebase.ServerValue.TIMESTAMP); queryRef.on('child_added', function(snap) { console.log(snap.val()); });