Estoy tratando de entender firebase-realtime-database. Puedo obtener los datos, pero no sé cómo agregar un bloque de finalización. Quiero decir, ¿hay una función para verificar cuándo se completa mi consulta de obtención de datos?
function getData() { firebase.database().ref('SectionNames').once('value', function(names) { names.val().forEach(function(sectionname) { firebase.database().ref('Sections').child(sectionname).once('value').then( function(child) //code }); }); }); //Completion block or a method to call processData() after I get all the sections } function processData() { //call this function after you get all the sections }¡Muchos gracias!
El método once() también devuelve una promesa, por lo que puede usar la lógica habitual de manejo de promesas ( then() / catch() o try / catch ).
Por ejemplo:
function getData() async { let names = await firebase.database().ref('sections').once('value'); processData(names); } Actualización : dado que ahora actualizó su código para mostrar que hay varias llamadas once en un bucle, puede usar Promise.all para eso:
function getData() { firebase.database().ref('SectionNames').once('value', function(names) { let promises = []; names.val().forEach(function(sectionname) { promises.push( firebase.database().ref('Sections').child(sectionname).once('value') ); }); Promise.all(promises).then((snapshots) => { processData(snapshots); }); }); }