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

330
Vistas
ts-node: el generador normal no funciona, pero async sí lo hace en un código totalmente síncrono

Hoy estaba tratando de construir un generador simple que pudiera recorrer un directorio de archivos de registro e iterar a través de cada archivo. ¿Debería ser una tarea relativamente sencilla? Me encontré con un problema con el uso de generadores, donde el uso de uno normal no funcionó, pero async sí lo hizo en un código totalmente síncrono.

¿Me estoy perdiendo algo obvio, o es esto un error?

Aquí está el código síncrono.

 // Assumes that the files and events within files are properly ordered function* streamFromCache(dataDir, files) { Logger.info('Streaming file from cache'); const files = fs.readdirSync(dataDir).sort(); for(const file of files) { const logLines = JSON.parse(fs.readFileSync(`${dataDir}/${file}`)); for(const logLine of logLines) { yield logLine; } } const consumer = () => { ... console.log('before'); for(const log of streamFromCache(dataDir, files) { console.log('test'); } console.log('after') }

la salida es justo antes, después, sin registros intermedios

Sin embargo, funciona cuando lo cambio a esto:

 // Assumes that the files and events within files are properly ordered async function* streamFromCache(dataDir, files) { Logger.info('Streaming file from cache'); const files = fs.readdirSync(dataDir).sort(); for(const file of files) { const logLines = JSON.parse(fs.readFileSync(`${dataDir}/${file}`))['result']; for(const logLine of logLines) { yield logLine; } } const consumer = async () => { ... console.log('before'); for await (const log of streamFromCache(dataDir, files) { console.log('test'); } console.log('after') }

Obtengo antes, prueba, después como se esperaba.

Estoy usando ts-node 10.4.0 y mecanografiado 4.5.4.

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