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

138
Visualizações
Problema al configurar por lotes un campo de documento por docId en Firestore

He estado usando firebase (firestore) por un tiempo, pero estoy un poco atascado y me preguntaba si alguien puede pensar en una solución.

En Firestore DB tengo una sola colección de usuarios, cada usuario tiene una dirección de correo electrónico y varios otros campos. En este caso, estoy comprobando si existe un correo electrónico de usuario y, si existe, quiero crear un campo de lista para ese usuario en particular con un listUid. Estoy haciendo referencia a los usuarios por correo electrónico, tomando el docId para esos usuarios y luego tratando de establecer un campo de lista para cada uno de ellos.

No recibo ningún error de Firestore, simplemente no se actualiza en la base de datos por algún motivo y no puedo entender dónde me estoy equivocando. Gracias por adelantado

 export const addListUidToExistingUserList = ( { firestore }, emailArray, listUid ) => { return async () => { let docIds = []; emailArray.forEach((emailAddress) => { //find users by email (works) const query = db .collection("users") .where("email", "==", emailAddress); //get docId's for user with matching email (works) query.get().then((querySnapshot) => { querySnapshot.forEach((doc) => { docIds.push(doc.id); }); }); //add a new list with corresponding listUid (does not work) docIds.forEach((id) => { let userRef = db.collection("users").doc(id); batch.set(userRef, { lists: [{ listUid }] }); }); }); return await batch.commit(); }; };
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Se encuentra con este problema porque su matriz docIds siempre está vacía en el momento en que llama a docIds.forEach .

Esto se debe a que query.get().then ejecuta de forma asincrónica, por lo que docIds.forEach no está esperando a que se complete.

Podrías:

  • await query.get().then ; o
  • Agregue la función docIds.forEach DENTRO de la devolución de query.get then

Aquí están sus posibles soluciones:

  1. await query.get().then
 //get docId's for user with matching email (works) await query.get().then((querySnapshot) => { querySnapshot.forEach((doc) => { docIds.push(doc.id); }); });

O:

  1. docIds.forEach dentro then
 //get docId's for user with matching email (works) query.get().then((querySnapshot) => { querySnapshot.forEach((doc) => { docIds.push(doc.id); }); docIds.forEach((id) => { let userRef = db.collection("users").doc(id); batch.set(userRef, { lists: [{ listUid }] }); }); });

Nota: Por supuesto, también puede agregar batch.set directamente en su primera iteración de querySnapshot.docs.forEach para evitar una iteración innecesaria.

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