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

190
Vistas
¿Cómo puedo llamar a varias funciones dependientes asíncronas de forma asíncrona para cada iteración?

tengo algunas funciones

 const firstResult = await firstFunction(parameters) const secondResult = await secondFunction(firstResult) const finalResult = await finalFunction(secondResult)

Son funciones asíncronas, que devuelven alguna promesa. Ahora hay un escenario en el que tengo una serie de parámetros que se pasan a `firstFunction en cada iteración y debería seguir el mismo flujo de ejecución. Algo como esto:

 const results = arrayOfParamters.map(async parameter => { const firstResult = await firstFunction(parameters) const secondResult = await secondFunction(firstResult) const finalResult = await finalFunction(secondResult) return finalResult })

Entonces, ¿cómo puedo lograr esto de manera más eficiente? Una de las soluciones eficientes que puedo visualizar es ejecutar firstFunction para el primer parameter , comenzar a ejecutar secondFunction y hasta entonces se cumple la promesa de secondFunction , comenzar a ejecutar firstFunction para la próxima iteración de arrayOfParameters . ¿Hay alguna manera de que pueda lograr esto? Parece que Promise.all no valdrá la pena si todo el bucle se va a ejecutar de forma sincrónica.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Su código ya está configurado para hacer eso.

Comenzará ejecutando el código del mapa para el elemento 0 de la matriz. Llama sincrónicamente a firstFunction pero luego presiona await , por lo que la función de mapeo devuelve una promesa. Esta promesa se pone en el elemento 0 de results . Luego hace lo mismo para el elemento 1, luego para el 2, etc. Por lo tanto, llamará a firstFunction para cada elemento de la matriz y asignará una matriz de promesas a los results , pero ninguna de ellas se bloqueará ni esperará.

La matriz de promesas ahora se ha creado, por lo que el código continúa con lo que viene después de esta línea. Con el tiempo, las llamadas a firstFunction comenzarán a finalizar y las funciones async se reanudarán, llamando a secondFunction para cada elemento de la matriz (no necesariamente en exactamente el mismo orden, ya que esto sucede en un momento impredecible). Y luego, eventualmente, todos realizarán la tercera función y, finalmente, resolverán sus promesas en finalResult .

Entonces, lo único que falta en su código es saber cuándo está todo listo, y para eso necesita Promise.all :

 const promises = arrayOfParamters.map(async parameter => { const firstResult = await firstFunction(parameter) const secondResult = await secondFunction(firstResult) const finalResult = await finalFunction(secondResult) return finalResult }) const results = await Promise.all(promises)
about 4 years ago · Juan Pablo Isaza Denunciar

0

Debido a que Promise.then encadena el resultado como un parámetro a la siguiente función, puede usar eso en lugar de async await

Puedes usar Promise.all así:

 const promiseChain = arrayOfParamters.map((parameter) => firstFunction(parameter).then(secondFunction).then(finalFunction)); const results = await Promise.all(promiseChain);
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