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

308
Visualizações
Cómo recorrer una matriz de documentos de Firebase Firestore e insertar valores en la matriz

Estoy escribiendo una función de nube de Firebase en node.JS que lee datos de usuario de Firebase Firestore. No puedo insertar los valores de los tokens en la matriz de tokens y devolver todos los tokens al final de la función. Mi código es el siguiente:

 function getTokens(subscribers) { return new Promise(async function (resolve, reject) { const tokenArray = []; subscribers.forEach(async (subscriber) => { await firestore .collection('users') .doc(subscriber) .get() .then((user) => { console.log("Getting user data for user: ", user); const tokens = user.data().tokens; if (tokens) { tokens.forEach((token) => { console.log("Adding token to token array"); // data is available here but does not push into tokenArray tokenArray.push(token); }); } }).catch((error) => { console.error(error); reject(error); }); }); console.log("Token Array -- Final: ", tokenArray); resolve(tokenArray); }); };

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

El código OP se puede corregir y hacer más conciso de la siguiente manera:

 async function getTokens(subscribers) { const getUser = subscriber => firestore.collection('users').doc(subscriber).get(); const promises = subscribers.map(getUser); const users = await Promise.all(promises); return users.map(user => user.data().tokens).flat() }

Algunas notas:

  • decora la función como async , ya que incluye una espera
  • no cree ninguna promesa adicional con Promise.new() , get() () de Firestore devuelve una promesa
  • recopile get promesas en una matriz con map y ejecútelas con Promise.all()
  • mapear los tokens de datos de los usuarios data.tokens produce una matriz de matrices. Aplanarlo y listo.
  • una catch que solo tira, es como no tener atrapada
about 4 years ago · Juan Pablo Isaza Relatório

0

No puede usar async-await await en un bucle forEach . Intente mapear una matriz de promesas y luego use Promise.all() como se muestra a continuación:

 function getTokens(subscribers) { return new Promise(async function (resolve, reject) { const subscribersDocs = await Promise.all( subscribers.map((subscriber) => { return firestore.collection("users").doc(subscriber).get(); }) ); const tokenArray = subscribersDocs.reduce((acc, curr) => { const tokens = curr.data().tokens; if (tokens) { acc = acc.concat(tokens); } return acc; }, []); console.log("Token Array -- Final: ", tokenArray); resolve(tokenArray); }); }

También consulte: Uso de async/await con un bucle forEach

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