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

192
Visualizações
Operaciones asincrónicas del analizador Csv de NodeJs

Estoy tratando de leer un archivo csv, obtener datos para cada registro en csv, hacer algunas operaciones y al final (después de que se completen todas las operaciones asíncronas) escribir un nuevo archivo csv aquí está el código:

 async function readInputCsv() { results = []; fs.createReadStream('./example_short.csv') .pipe(csv()) .on('data', async function(data){ console.log("trying for name: ", data.username); let edu = await getLastEducation(data.username); results.push({ name: data.username, level: edu }) console.log(data.username,": ", edu) }).on("end", () => { console.log("end ! "); writeCsv(results); }); }

Lo que pasa es "¡fin!" se imprime antes de que la función getLastEducation devuelva las respuestas

about 4 years ago · Santiago Gelvez
2 Respostas
Responde à pergunta

0

fs.createReadStream().on() no acepta Promises como segundo argumento.

on(event: string, listener: (...args: any[]) => void): this;

about 4 years ago · Santiago Gelvez Relatório

0

En primer lugar, los results en este caso son una variable global. Le sugiero que use la palabra clave let para declararla dentro del alcance de la función.

Lo que sucede en este caso es que el tiempo que tarda getLastEducation() en la operación asíncrona es mayor que el tiempo requerido para el archivo example_short.csv .

Para evitar esto, agregue la palabra clave await antes fs.createReadStream() y mueva la función writeCsv() (supongo que está usando csv-writer dentro de esta función) después de la operación de lectura completa. La palabra clave await lo hará esperar hasta que finalice la operación de obtención asíncrona.

 async function readInputCsv() { let results = []; await fs .createReadStream('./example_short.csv') .pipe(csv()) .on('data', async function (data) { console.log('trying for name: ', data.username); let edu = await getLastEducation(data.username); results.push({ name: data.username, level: edu, }); console.log(data.username, ': ', edu); }) .on('end', () => { console.log('end ! '); }); writeCsv(results); }
about 4 years ago · Santiago Gelvez Relatório
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