Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

195
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!