Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

136
Views
node.js no está actualizando la variable

Estoy tratando de escribir una funcionalidad en la que estoy tratando de leer un archivo csv, y antes de eso estoy tratando de verificar que los encabezados de ese archivo csv particular se den correctamente o no. A continuación se muestra mi código

 let validHeaders = false; fs.createReadStream(path) .pipe(csv.parse({headers : true , ignoreEmpty : true})) .on('headers',async function(headers){ validHeaders = await CustomValidation.isValidRowsExists(headers); console.log(validHeaders); // here i am getting true .on('data',async function(req,res,data){ console.log(validHeaders); //here i am getting false if(validHeaders){ //do something

Esta es mi clase CustomValidation

 class CustomValidation{ isValidRowsExists = async(csvRows) =>{ for(let i=0;i<csvRows.length;i++){ if(csvRows[0]==='Col1 && csvRows[1]==='Col2 ....){ return true; }else{ return false; } } } } module.exports = new CustomValidation;

Cómo puedo usar el valor validHeaders

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Probablemente necesites algo como esto:

 const main = async () => { const csvStream = fs .createReadStream(path) .pipe(csv.parse({ headers: true, ignoreEmpty: true })); const validHeaders = await new Promise((resolve) => csvStream.on("headers", (headers) => resolve(CustomValidation.isValidRowsExists(headers)) ) ); csvStream.on("data", (data) => { if (validHeaders) { console.log(data); } }); }; main();

UPD: una demostración para Heiko con validación asíncrona larga demostración de validación

about 4 years ago · Juan Pablo Isaza Report

0

Si CustomValidation.isValidRowsExists fuera asíncrono (pero vea a continuación):

La solución de moondef adjunta el .on("data") solo después de esperar el resultado de CustomValidation.isValidRowsExists . Pero para entonces, es posible que los eventos data ya hayan ocurrido.

Sugiero adjuntar los controladores de forma sincrónica y usar una promesa para registrar los datos de forma asincrónica, después de que se haya determinado la validez del encabezado.

 var validHeaders; csvStream.on("headers", function(headers) { validHeaders = Promise.resolve(CustomValidation.isValidRowsExists(headers)); }) .on("data", function(data) { validHeaders.then(function(valid) { if (valid) console.log(data); }); });

Sin embargo , CustomValidation.isValidRowsExists como se muestra en realidad no es asíncrono, porque no contiene await y no devuelve una promesa.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!