Estoy usando la base de datos en tiempo real de firebase. Estoy tratando de obtener los datos de la base de datos y devolverlos.
Necesito regresar porque estoy llamando a una función que debería hacer esto, obtener los datos de la base de datos y regresar. Pero en la función a la que llamo esta función 'getData()', el valor viene como 'indefinido'.
¿Tengo que usar funciones asíncronas? O tener otro método. alguien me explica por favor
import { construct_bd } from "../../database.js"; function blog_posts() { let section = document.getElementById("blog_posts_container"); function show() { let data = construct_bd.getData("/posts"); console.log(data) } setTimeout(() => { show() }, 200); ... }base de datos.js
... // Variables let database = firebase.database(); ... getData(reference){ let data; database.ref(reference).once("value") .then(snapshot => data = snapshot.val()) .catch(error => console.log(error)) .finally(() => {return data}) }, ...Si la función getData devuelve una promesa, entonces use await en su función de llamada. Por ejemplo
async function show() { let data = await construct_bd.getData("/posts"); console.log(data) } Si getData no es una promesa, puede cambiarlo en consecuencia.
getData(reference){ return new Promise((resolve,reject) => { database.ref(reference).once("value"). then(snapshot => data = snapshot.val(); resolve(data); ).catch( error => reject(error) ).finally(() => reject(data); ) }); }