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

149
Vistas
Función Firebase Cloud: ¿Obteniendo datos de Firestore dentro de un bucle for of?

Tengo usuarios siguiendo categorías. Si se agrega un nuevo producto a la base de datos, quiero que se agregue automáticamente a su lista de deseos a través de una función en la nube.

He estado luchando durante 2 días con eso y sin éxito :( El problema es con la búsqueda que devuelve un valor vacío. Entiendo por este hilo que tiene que ver con la espera asíncrona, pero no logré transformar mi función en consecuencia. (que tiene que ser v8 y no modular)

Gracias por su ayuda chicos!

Aquí está mi función:

 const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); const db = admin.firestore(); exports.addProductToUserWhenCreated = functions.firestore.document('products/{documentUid}').onCreate((snap, context) => { // get the categories of the product (array of category iDs, noting that a product can be in different categories) let productCategories = snap.data().categories let productId = snap.id let categorySelectedBy // For each category, for (const category of productCategories) { // get the selectedBy field (array of userIds) => HERE IS THE ISSUE const snap = db.doc(`categories/${category}`).get() snap.then((doc) => { return categorySelectedBy = doc.data().selectedBy; }) // Add the productId to the user's selectedProducts (by creating a subcollection in the user's document) categorySelectedBy.map(user => { db.doc(`users/${user}/selectedProducts/${productId}`).set({ achievedRate: 0, }) }) } });

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Creo que estás bastante cerca. Debido a que usa un bucle for...of , en realidad puede usar await si marca toda la función de la nube como async :

 // Add async here 👉 👇 exports.addProductToUserWhenCreated = functions.firestore.document('products/{documentUid}').onCreate(async (snap, context) => { // get the categories of the product (array of category iDs, noting that a product can be in different categories) let productCategories = snap.data().categories let productId = snap.id let categorySelectedBy // For each category, for (const category of productCategories) { // get the selectedBy field (array of userIds) // await here 👇 const doc = await db.doc(`categories/${category}`).get() const categorySelectedBy = doc.data().selectedBy; // Add the productId to the user's selectedProducts (by creating a subcollection in the user's document) // 👇 Use Promise.all to wait for all writes here Promise.all(categorySelectedBy.map(user => { return db.doc(`users/${user}/selectedProducts/${productId}`).set({ achievedRate: 0, }) })) } });
about 4 years ago · Santiago Trujillo 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