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

191
Vistas
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 Respuestas
Responde la pregunta

0

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

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

about 4 years ago · Santiago Gelvez Denunciar

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 Denunciar
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