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

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

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