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

215
Visualizações
¿No se puede iterar a través de la matriz desde una función Javascript asíncrona?

Estoy atascado en un problema en el que analizo los resultados de una API en getSubscriptions() . Esto llama a getUserSubs() que devuelve el siguiente objeto:

Resultado Esperado

Cuando llamo a subscriptions , obtengo el fragmento esperado de la consola de matrices (consulte "Obras").

Pero cuando trato de iterar en las subscriptions de matriz (consulte "No funciona"), ni siquiera se llama al contenido de la función.

userSubs() se llama para datos API

 async function getUserSubs(userId) { const ref = collection(db, "users", userId, "subscriptions") let subList = [] try { const subIds = await getDocs(ref) subIds.forEach(subRef => { const docRef = subRef.data() getDocData(docRef.product).then(product => { subList.push(product) }) }) return subList } catch (e) { console.error("Error in getting subscriptions: ", e) return [] } }

Obras

 function getSubscriptions(userId) { getUserSubs(userId).then(subscriptions => { console.log(subscriptions) // Works as intended } }

no funciona

 function getSubscriptions(userId) { getUserSubs(userId).then(subscriptions => { subscriptions.forEach(x => { console.log(x) // ISSUE: This isn't called }) }

Tampoco funciona

 let a = [] getUserSubs(userId).then(subscriptions => { subscriptions.forEach(x => a.push(x)) }) console.log(a)

Sé que hay preguntas similares, pero después de leerlas, todavía no puedo resolver mi problema.

Problemas similares:

  • ¿Cómo acceder al valor de una promesa?
  • Usando async/await con un bucle forEach
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

getUserSubs(userId).then(subscriptions => { console.log(subscriptions) // Works as intended }

No, no lo hace. Solo aparece así porque está inspeccionando la matriz en vivo que se mutó después de haberla registrado en la consola .

Tampoco funciona:

 let a = [] getUserSubs(userId).then(subscriptions => { subscriptions.forEach(x => a.push(x)) }) console.log(a)

Sí, por razones bastante obvias : la matriz se registra antes de que la llene. Tendría que ser cualquiera

 getUserSubs(userId).then(subscriptions => { let a = [] subscriptions.forEach(x => a.push(x)) console.log(a) })

o

 let a = [] const subscriptions = await getUserSubs(userId) subscriptions.forEach(x => a.push(x)) console.log(a)

Pero ninguno de estos resolverá su problema central: getUserSubs devuelve una matriz vacía antes de que se llene, en las líneas

 subIds.forEach(subRef => { const docRef = subRef.data() getDocData(docRef.product).then(product => { subList.push(product) }) }) return subList

nunca espera la promesa getDocData . Si cambias eso a

 let subList = [] for (const subRef of subIds) { const docRef = subRef.data() const product = await getDocData(docRef.product) subList.push(product) } return subList

o solo

 return Promise.all(subIds.map(subRef => { const docRef = subRef.data() return getDocData(docRef.product) }))

funcionaría, como se describe en la pregunta que ya encontró .

(Es posible que esto aún no funcione. subIds se parece sospechosamente a una instantánea de Firebase, que no es una matriz y no se puede iterar ni tiene un método .map . En ese caso, deberá usar forEach + push manualmente ).

about 4 years ago · Juan Pablo Isaza Relatório

0

Honestamente, no usaría el método forEach(). Creo que todo lo que necesita hacer para solucionar esto es iterar sobre los resultados en un bucle for normal.

 for(let subscription of subscriptions) { console.log(subscription); } OR for(let index in subscriptions) { console.log(subscriptions[index]); }

Si esto no funciona, abriré una caja de arena y miraré más a fondo.

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