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

132
Vistas
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 Respuestas
Responde la pregunta

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 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