J'ai une application où de nouveaux enfants sont ajoutés à Firebase toutes les 5 secondes environ. J'ai des milliers d'enfants.
Lors du chargement de l'application, j'aimerais traiter les milliers initiaux différemment des enfants suivants qui ruissellent toutes les 5 secondes.
Vous pourriez suggérer que j'utilise la valeur, que je traite tout, puis que j'utilise children_added. Mais je crois que si le traitement prend trop de temps, j'ai le potentiel de manquer un point.
Existe-t-il un moyen de le faire dans Firebase qui garantit que je ne manque aucun point?
Puisque child_added
les événements pour les données initiales préchargées se déclencheront avant l'événement value
se déclenche sur le parent, vous pouvez utiliser le value
événement comme une sorte de notification "données initiales chargées". Voici un code que j'ai légèrement modifié de ne autre question StackOverflow similaire .
var initialDataLoaded = false;
var ref = new Firebase('https://<your-Firebase>.firebaseio.com');
ref.on('child_added', function(snapshot) {
if (initialDataLoaded) {
var msg = snapshot.val().msg;
// do something here
} else {
// we are ignoring this child since it is pre-existing data
}
});
ref.once('value', function(snapshot) {
initialDataLoaded = true;
});
Heureusement, Firebase mettra en cache intelligemment ces données, ce qui signifie que la création d'un child_added
et un écouteur value
ne téléchargeront les données qu'une seule fois. Ajouter de nouveaux écouteurs Firebase pour des données qui ont déjà traversé le fil est extrêmement bon marché et vous devriez vous sentir à l'aise de faire des choses comme ça régulièrement.
Si vous êtes inquiet de télécharger toutes ces données initiales alors que vous n'en avez pas réellement besoin, je suivrais les suggestions de @ FrankvanPuffelen dans les commentaires pour utiliser une requête horodatée. Cela fonctionne très bien et est optimisé à l'aide de requêtes Firebase.