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

87
Vistas
Bucle de espera dentro de Promise

Imagina que tenemos una función de generador asíncrono:

 async f * (connection) { while (true) { ... await doStuff() yield value } }

Supongamos que esta función es prácticamente infinita y nos da resultados de algunas acciones asíncronas. Queremos iterar estos resultados:

 for await (const result of f(connection)) { ... }

Ahora imagine que queremos salir de este ciclo for-await cuando finaliza algún tiempo de espera y limpiar las cosas:

 async outerFunc() { setTimeout(() => connection.destroy(), TIMEOUT_MS) for await (const result of f(connection)) { ... if (something) { return 'end naturally' } } }

Suponga que connection.destroy() finaliza la ejecución de f y finaliza el ciclo for-await . Ahora sería genial devolver algún valor de la outerFunc cuando finalice el tiempo de espera. El primer pensamiento se envuelve en una Promise :

 async outerFunc() { return await new Promise((resolve, reject) => { setTimeout(() => { connection.destroy() resolve('end by timeout') }, TIMEOUT_MS) for await (const result of f(connection)) { // nope ... if (something) { resolve('end naturally') } } }) }

Pero no podemos usar awaits dentro de Promise y no podemos async la función debido a este antipatrón.

La pregunta es: ¿cómo regresamos por tiempo de espera de la manera correcta?

about 4 years ago · Juan Pablo Isaza
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