¿Cómo puedo arreglar esto? No tengo idea de qué son los bucles de eventos, promesas, asíncrono o espera. Puede enviarme un enlace a una explicación, o simplemente escribirme una explicación. Sin embargo, este no es el problema principal. El problema es que estoy tratando de obtener datos de firebase en una función que comienza en la línea 38, y obtengo [objeto de objeto] en lugar de los datos. Pero, si miro en la consola de firebase, me está dando [Promesa de objeto] Aquí está el código:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <p id="i"></p> <script type="module"> // Import the functions you need from the SDKs you need import { initializeApp } from "https://www.gstatic.com/firebasejs/9.6.7/firebase-app.js"; import { getAnalytics } from "https://www.gstatic.com/firebasejs/9.6.7/firebase-analytics.js"; import { getDatabase, ref, set, get, child} from "https://www.gstatic.com/firebasejs/9.6.7/firebase-database.js"; // TODO: Add SDKs for Firebase products that you want to use // https://firebase.google.com/docs/web/setup#available-libraries // Your web app's Firebase configuration // For Firebase JS SDK v7.20.0 and later, measurementId is optional const firebaseConfig = { apiKey: "AIzaSyCnfB3Tfu9bo7PyEvhB1ZAPBbit7ZWm9D8", authDomain: "square-1cdce.firebaseapp.com", projectId: "square-1cdce", storageBucket: "square-1cdce.appspot.com", messagingSenderId: "82191280296", appId: "1:82191280296:web:45e62faffbb7e8a94cfa9d", measurementId: "G-NT53HS3WE9" }; // Initialize Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); const db = getDatabase() const dbRef = ref(getDatabase()); var data={}; var x=prompt("Message:") get(child(dbRef, "text")).then((snapshot) =>function(){ if (snapshot.exists()) { data=snapshot.val() } else { data="No data available" } }).catch((error) => { console.error(error); }); set(ref(db, 'text/'), { texts: get(ref(db, 'text/'))+"<br>"+x }); document.getElementById("i").innerHTML= data; </script> </body> </html>PD. Soy un javascript de aprendizaje de diez años de edad. Mi padre me inscribió en clases.
Sal. Hice verdaderos los valores de lectura y escritura en las reglas, por lo que cualquiera puede cambiar los datos con este código.
Estás haciendo que la escritura sea más complicada de lo necesario.
set(ref(db, 'text/'), { texts: get(ref(db, 'text/'))+"<br>"+x // 👆 This is not needed 👆 }); Para escribir el valor de x en la base de datos, puede hacer:
set(ref(db, 'text/'), { texts: x }); Si desea agregar el valor de x al valor actual en la base de datos, deberá usar una transacción en lugar de set :
runTransaction(ref(db, 'text/texts'), (text) => { return text + "<br>" + x; }); Sin embargo, una mejor manera de almacenar múltiples valores es usar una lista , en la que puede agregar el valor de x a esa lista con:
push(ref(db, 'text/texts'), x);