Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

332
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda