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

324
Views
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
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!