Comment séparer les données initiales de la charge de différentiels enfants avec Firebase?
J'ai une application où de nouveaux enfants sont ajoutées à la Firebase toutes les 5 secondes. J'ai des milliers d'enfants.
Sur l'application de la charge, j'aimerais processus initial des milliers différemment des autres enfants par la suite que peu de choses dans toutes les 5 secondes.
Vous pourriez me suggère d'utiliser la valeur, le processus de tout, et ensuite utiliser children_added. Mais je crois que si le traitement est trop long, j'ai le potentiel de manquer un point.
Est-il un moyen de le faire dans Firebase que des garanties de ne pas en rater un point?
- Si vous ajouter un horodatage pour les enfants avec
Firebase.ServerValue.TIMESTAMP
, ce sera facilestartAt
. Avez-vous essayer quelque chose de déjà? Si oui, pouvez-vous partager le code et où (vous peur) il ne parvient pas? - double possible de comment jeter des données initiales dans un Firebase DB
- Voir aussi: Comment faire pour récupérer uniquement les nouvelles données
- comment gérez-vous l'horodatage des différences entre les Firebase du serveur d'horodatage et de ce que demande les données?
- Voir le premier lien que Kato posté.
- Je l'ai fait. Il y a la possibilité de l'absence de données avec cette solution. Voir mon commentaire sur ma réponse.
Vous devez vous connecter pour publier un commentaire.
Depuis
child_added
événements pour la première, pré-chargé données feu avant lavalue
événement se déclenche sur le parent, vous pouvez utiliser levalue
événement comme une sorte de "données initiales chargé de notification". Voici quelque code que j'ai légèrement modifié à partir de une autre question StackOverflow.Heureusement, Firebase sera intelligemment cache ces données, ce qui signifie que la création d'un
child_added
et unvalue
auditeur ne télécharger les données une seule fois. L'ajout de nouveaux Firebase auditeurs de données qui a déjà franchi le fil est très bon marché et vous devriez vous sentir à l'aise de faire des choses comme ça régulièrement.Si vous êtes inquiet au sujet de télécharger tout ce que des données initiales lorsque vous n'avez pas besoin de cela, je voudrais suivre @FrankvanPuffelen suggestions dans les commentaires d'utiliser un horodaté requête. Cela fonctionne vraiment bien et est optimisé à l'aide de Firebase requêtes.
value
événement se déclenche avant tout nouvelleschild_added
événements feu, de sorte que vous devriez être bien là. Pour le traitement de données par la fonction de rappel, ça ne devrait pas d'importance aussi longtemps que vous êtes à la vérification de lainitialDataLoaded
variable tout de suite. Si vous cochez plus tard dans la fonction de rappel après un tas de blocage de code, il peut avoir passé àtrue
, qui est ce que je pense que vous obtenez au. Vous devez suivre les habituels JavaScript meilleures pratiques ici car ce n'est pas vraiment un Firebase question spécifique.L'amélioration de la réponse de @jacobawenger de ne pas utiliser de l'état global de la variable
Il y a deux solutions possibles à ce problème, ni satisfaire:
1) Horodatage de vos enfants, et seulement à la demande des enfants qui ont un horodatage supérieur à un "maintenant" de la valeur. Ce n'est pas génial parce que vous pouvez avoir une synchronicité entre votre application "maintenant" et le "maintenant" sur tout ce qui est en poussant les données de Firebase ou la Firebase serveur de la valeur pour "maintenant".
2) de la valeur d'Usage et de l'enfant ajouté. Tous les doublons vu dans child_added qui avait déjà été vu dans la valeur peut être ignoré. C'est inutilisable pour de grands ensembles de données car elle nécessite le téléchargement de l'historique des données deux fois!
Pourquoi ne peut-il y avoir une commande comme "child_added" qui N'est PAS donner à tout jamais?