Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
iterar a través de múltiples documentos con cierta identificación de documento de una colección

Espero que estés codificando bien, estoy usando firebase y vue js para crear una aplicación de mensajería. Cada usuario tiene un documento, y dentro de cada documento hay un campo llamado includeInMsg, que contiene el Id del mensaje que el usuario incluyó. Sé cómo leer un documento por su identificación, pero no sé cómo leer varios documentos por sus identificaciones. aquí puedes ver mi código:

 import { ref } from "vue"; import { db } from "src/boot/firebase"; import { getAuth, onAuthStateChanged } from "firebase/auth"; import { updateDoc, arrayUnion, arrayRemove } from "firebase/firestore"; import { addDoc, collection, query, where, getDocs, getDoc } from "firebase/firestore"; import { doc, onSnapshot } from "firebase/firestore"; export default { setup() { return { userList: ref([]), userMessageRefList: ref([]), userMessageDocList: ref([]), freelancerProfile: ref([]), messages: ref([]), userMessage: ref([]), listofdata: ref([]) }; }, async created() { // check if user loged in or not const auth = getAuth(); onAuthStateChanged(auth, user => { if (user) { // store current user uid in userlist this.userList.unshift(user.uid); this.renderMessageList(); } else { this.$router.push("/"); } }); }, methods: { // render user message list doc id async renderMessageList() { const currentUserProfile = query( collection(db, "userProfile"), where("uuid", "==", this.userList[0]) ); const userProfileQuerySnapshot = await getDocs(currentUserProfile); userProfileQuerySnapshot.forEach(doc => { let docData = doc.data(); this.userMessageRefList.unshift(docData.messageList); this.listofdata.unshift(docData); }); this.userMessageRefList.forEach(elem => // store doc id into userMessageDocList elem.forEach(le => this.userMessageDocList.unshift(le)) ); console.log(this.userMessageDocList) //output: {0: {…}, 1: {…}} // now I need to read each document by their doc Id and store it in an array to render }, }, computed: { checkMessages: function() { if (this.messages.length > 1) { return true; } else { return false; } } } };

Traté de usar for loop para leer cada documento y almacenar el valor en una matriz, pero obtuve SyntaxError: Unexpected reserved word 'await'. (71:26) error.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Como se confirma en los comentarios, this.userMessageDocList contiene un objeto compuesto que contiene objetos con los ID de los documentos.

En este caso, debe usar Promise.all() para activar una cantidad variable de llamadas a Firestore en paralelo.

Como se explica en el documento (ver enlace arriba):

El método Promise.all() toma una iteración de promesas como entrada y devuelve una única promesa que se resuelve en una matriz de los resultados de las promesas de entrada.


Por lo tanto, debe recorrer el objeto, tomar los ID de documentos y completar una matriz de promesas que pasa a Promise.all() . En pseudocódigo (le dejo usar el método que desea para recorrer el objeto, hay muchos ejemplos en SO) es algo como lo siguiente:

 const promisesArray = []; <Loop For each element> // Assumption: element.docId contains the Firestore doc ID promisesArray.push(getDoc(doc(db, "yourCollection", element.docId))) </End Loop> const docSnapshotsArray = await Promise.all(promisesArray); docSnapshotsArray.forEach(docSnap => { console.log(docSnap.data()); // ... });

docSnapshotsArrays es una matriz de DocumentSnapshot s . Luego puede recorrer esta matriz y hacer lo que quiera.


No sé si esto es importante para su caso específico, pero tenga en cuenta que con Promise.all() , los valores devueltos en el Array resultante estarán en el orden de las Promesas pasadas , independientemente del orden de finalización.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda