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

116
Vistas
Cómo evitar la espera... de con csv-parse

Estoy buscando ser educado sobre este problema ya que he pasado unos días tratando de resolverlo por mi cuenta, sin éxito.

Estoy usando csv-parse para analizar un archivo CSV.
Estoy usando ESLint como mi Linter
Estoy usando el complemento de la guía de estilo de JavaScript de Airbnb para ESLint
Estoy ejecutando esto en el backend usando NodeJS

mi función es:

 const { parse } = require('csv-parse'); const fs = require('fs'); const csvFile = 'myCsvFile.csv'; async function parseCsv(csvFile) { const records = []; const parser = fs.createReadStream(csvFile).pipe(parse({ delimiter: ',', columns: true })); for await (const record of parser) { records.push(record); } return records;

La función funciona bien, sin embargo, estoy tratando de cumplir con la Guía de estilo de Airbnb, a la que no le gusta el bucle for await...of , ya que me está golpeando con la violación no-restricted-syntax .

Tengo curiosidad por saber si hay una mejor manera de escribir esto para estar en línea con la Guía de estilo de Airbnb o si esta es una de esas situaciones en las que está bien ignorar la infracción.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

La guía de estilo dice:

11.2 No use generadores por ahora. ¿Por qué? No se transpilan bien a ES5.

Afortunadamente, si está usando una versión reciente de NodeJS, no necesita transpilar y puede usar el soporte nativo del motor. Para los navegadores, este consejo también quedará obsoleto pronto.

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Qué hay de usar los eventos y devolver la promesa?

 const { parse } = require('csv-parse'); const fs = require('fs'); const csvFile = 'myCsvFile.csv'; async function parseCsv(csvFile) { return new Promise((resolve) => { const records = []; const stream = fs.createReadStream(csvFile); const parser = stream.pipe(parse({ delimiter: ',', columns: true })); parser.on('readable', () => { while (record = parser.read()) { records.push(record); } }); let ended = false; const end = (error) => { if (error) { console.error(error.message); } if (!ended) { ended = true; resolve(records); } }; parser.on('error', end); parser.on('end', end); }); }

también si tiene el nodo 15+, intente el ejemplo de transmisión/promesas :

 const { parse } = require('csv-parse'); const fs = require('fs'); const { finished } = require('stream/promises'); const csvFile = 'myCsvFile.csv'; async function parseCsv(csvFile) { const records = []; const stream = fs.createReadStream(csvFile); const parser = stream.pipe(parse({ delimiter: ',', columns: true })); parser.on('readable', () => { let record; while ((record = parser.read()) !== null) { records.push(record); } }); await finished(parser); return records; }

csv-parse + corriente/promesas

about 4 years ago · Juan Pablo Isaza Denunciar

0

Según los consejos dados en las respuestas, ignoraré la Guía de estilo de Airbnb y usaré el método iterador Async .

Código definitivo:

 const { parse } = require('csv-parse'); const fs = require('fs'); const path = require('path'); const debug = require('debug')('app:csv:service'); const chalk = require('chalk'); async function parseCsv(csvFile) { try { const records = []; const stream = fs.createReadStream(csvFile); const parser = stream.pipe(parse({ delimiter: ',', columns: true })); // eslint-disable-next-line no-restricted-syntax for await (const record of parser) { records.push(record); } return records; } catch (error) { debug(`${chalk.red('Failed')} to parse CSV`); debug(`${chalk.red('ERROR:')} ${error}`); throw error; } }

Puede que sea el momento de encontrar una nueva guía de estilo a seguir. Gracias a num8er por el consejo sobre el código (tomé una de sus ideas para hacer que mi código sea un poco más legible).

about 4 years ago · Juan Pablo Isaza 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