El siguiente código es lo que he estado tratando de hacer, pero dbRef.on("child_added... ejecuta después de la verificación final. Sé por qué sucede esto, entonces, ¿cómo podría hacer un condicional similar con cada niño en una ruta de base de fuego en una vez y luego ejecute una verificación después. Gracias.
let dbRef = firebase.database().ref("/ExamplePath"); let found = false; dbRef.on("child_added", (child) => { if (child.val().test == testingVal) { console.log("Found One!"); found = true; } }); if (found) { console.log("Finished!"); }else{ console.log("Nope!"); }El controlador child_added se llama para cada hijo, y no hay forma de saber si este fue el último hijo. Para eso querrás escuchar el evento de value .
Así que una de las opciones es:
let dbRef = firebase.database().ref("/ExamplePath"); let found = false; dbRef.on("child_added", (child) => { if (child.val().test == testingVal) { console.log("Found One!"); found = true; } }); dbRef.on("value", (snapshot) => { if (found) { console.log("Finished!"); }else{ console.log("Nope!"); } });Esto funciona muy bien, y Firebase garantiza que los datos solo se descarguen una vez, a pesar de que se pasan a ambos oyentes.
Si lo prefiere, también puede hacer lo mismo con solo un oyente de value :
let dbRef = firebase.database().ref("/ExamplePath"); dbRef.on("value", (snapshot) => { let found = false; snapshot.forEach((child) => { if (child.val().test == testingVal) { console.log("Found One!"); found = true; } }); if (found) { console.log("Finished!"); }else{ console.log("Nope!"); } }); El resultado y la eficiencia de ambos enfoques es el mismo, por lo que debe elegir el que sea más conveniente para su aplicación. Por ejemplo, prefiero escuchar los eventos child_ cuando soy responsable de actualizar cada elemento en la interfaz de usuario directamente, ya que el evento child_* me dice directamente qué hacer.