Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

173
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda