Suis-je en utilisant ForEach correctement?
Je suis en train de travailler sur une présence-comme système de firebase avec la mise en page suivante:
firebase {
user1 {
isOnline: true
}
user 2 {
isOnline: true
}
user3 {
isOnline: false
}
}
La isOnline les booléens sont ce que je vais utiliser plus tard pour la sortie les noms des utilisateurs qui sont en ligne de la console
Ainsi, par exemple, dans le cas ci-dessus, il serait de dire:
user1 is online.
user2 is online.
Voici mon code:
var gameRef = new Firebase("https://xxx.firebaseio.com/");
var userOnline = new Firebase('https://xxx/.info/connected');
userOnline.on('value', function (snapshot) {
if (snapshot.val()) {
gameRef.child(user).update({
isOnline : true
});
}
else {
gameRef.child(user).update({
isOnline : false
});
}
});
//for each user that is online, output to the console
gameRef.forEach(function (snapshot) {
var obj = snapshot.val();
if(obj.isOnline == true) {
console.log(obj.name + " is online.");
}
});
Il semble y avoir un problème avec mon forEach, comment puis-je résoudre ce problème?
Merci.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas
forEach
sur une ref, mais seulement sur un instantané.Ce code a deux instantané variables:
gameSnapshot
les données dans le nœud parentsnapshot
est la donnée d'un joueur en particulierAlternative
L'approche ci-dessus permettra de télécharger tous les joueurs, même si vous cherchez seulement à traiter avec des joueurs qui sont en ligne. Il est plus efficace dans ce cas, à la requête de Firebase, de sorte qu'il retourne uniquement les joueurs qui sont en ligne.
Le code maintenant à l'écoute de la
child_added
événement, depuis Firebase cuillère-nous nourrit les joueurs un à un. Vous aurez probablement aussi pour gérerchild_changed
etchild_removed
, une fois que vous tracer les joueurs, pour les éléments HTML.Même si cela résultera en un peu plus de code, je voudrais vous recommandons d'utiliser normalement l'interrogation et la
child_*
événements, car ils limitent les données que Firebase vous envoie à la fois à l'origine et par exemple, lorsqu'un joueur se déconnecte.Uncaught TypeError: undefined is not a function
d'erreur, des idées? Voici mon code: jsfiddle.net/b03nh7ojorderByChild
a été ajouté dans la version 2.0. À noter que "l'indéfini n'est pas une fonction" est un très commune erreur pour obtenir en JavaScript et vous feriez bien d'apprendre à déboguer. J'ai simplement ajouté undebugger
déclaration à votre code d'escalier et à travers elle dans un violon pour trouver ce qui s'est brisée. Ensuite, il est assez facile de comprendre quelle est la partie de la ligne est faux dans l'onglet console du navigateur outils de dev.forEach
est une méthode de tableau maissnapshot
sont des objets donc, je suis à bout de ressources commentforEach
fonctionne sursnapshot
objets. Est qu'un polyfill, ES6 fonctionnalité ou d'unesnapshots
propre méthode interne. Peut-u s'il vous plaît jeter plus de lumière sur ce point. Merci.