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));
});
}