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

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

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 Denunciar

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