ksergio.com

I love coding

← Volver

Leer un stream de csv con async-await

15/2/2024

Con la librería csv puedo trabajar con archivos .csv pero como streams. Por legibilidad y para evitar un callback-hell he envuelto todo el proceso en una promesa.

¿Sirve para algo?

No lo sé, pero ahora se puede utilizar simplemente llamando la función.

const data = await parseCSV(path)

Se crea un array que se va poblando cuando el parser lee una fila del archivo con el evento data. Cuando termina con el evento end simplemente resuelvo la promesa , si falla la rechaza.

const  fs  =  require('node:fs')
const {parse} =  require('csv')
  
async  function  parseCSV(path) {
    return  new  Promise((resolve, reject) => {
        const  results  = [];

        fs.createReadStream(path)
            .pipe(parse({ delimiter:  ",", from_line:  2 }))
                .on('data', (data) =>  results.push(data))
                .on('end', () =>  resolve(results))
                .on('error', (error) =>  reject(error));
    });
}