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

252
Vistas
llamada asíncrona en javascript y Promise.all

tengo tres funciones

 async function inventories() { print("starting inventories") sleepFor(5000) // Here I am querying a mongodb database const inventoriesRes = await db.inventories.find({}) return inventoriesRes } async function costs() { print("starting costs") const costsRes = await db.costs.find({}) return costsRes } async function users() { print("starting users") const users = await db.users.find({}) return usersRes }

Deseo :

  1. Las consultas que se ejecutarán en //
  2. Una vez que haya terminado, imprima los resultados.

aquí está mi solución

 const dbqueries = async () => { const [result1, result2, result3] = await Promise.all([inventories(), costs(), users()]) return {result1, result2, result3} } dbqueries.then(results => { print(JSON.stringify(results)) }).catch(error => { throw error });

El problema es que no me funciona esta solución como yo quiero. Para verificar, puse un sueño (vea el código a continuación) en la función de inventories() . lo que pasa es

 printing starting inventories waiting for 5 seconds printing costs printing users

Esto me dejó pensar que los costos () no comenzaron en paralelo. Si hubiera comenzado antes, habría

 printing starting inventories printing costs printing users ...
 function sleepFor(sleepDuration){ var now = new Date().getTime(); while(new Date().getTime() < now + sleepDuration){ /* Do nothing */ } }

O mi solución es incorrecta, o la función sleepFor está haciendo algo más que simplemente poner a dormir solo la función de inventories() . ¿Alguna ayuda?

PD. print funciona exactamente como console.log() en mongoshell, que es un intérprete JS completamente funcional

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

0

…o la función sleepFor está haciendo algo más que simplemente poner a dormir solo la función de inventories()

Precisamente eso. Ha escrito una función de suspensión de bloqueo síncrona que detiene todo el programa. Lo ha llamado antes de cualquier await en la función, por lo que ni siquiera está durmiendo más tarde mientras el trabajo concurrente ya está en marcha, está durmiendo antes de que inventories() devuelva su promesa y las otras dos funciones puedan ser llamadas.

Su programa original funcionó como se esperaba. Para la verificación, debería haber agregado otra declaración de print para registrar cuando finaliza cada llamada a la base de datos:

 async function inventories() { print("starting inventories") // Here I am querying a mongodb database const inventoriesRes = await db.inventories.find({}) print("finished inventories") return inventoriesRes }

Recuerde que el código JS no se ejecuta en paralelo, en múltiples subprocesos ni nada. Todo lo que puede hacer es iniciar varias tareas asincrónicas (en su caso, las consultas de la base de datos), sin esperar inmediatamente a que finalice cada una. Más bien, los inicia todos, luego espera los resultados mientras hacen su trabajo al mismo tiempo.

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