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

237
Vistas
la función nodejs express no devuelve la variable de fs.readFile

Tengo la siguiente función en mi nodejs, usando express.

 function metaInfo (id){ var dir = 'files/'+id; var count = 0 fs.readFile(__dirname +'/' + dir+'/myfile.json', 'utf8', function (err, data) { if (err) throw err; obj = JSON.parse(data); var myArr = obj.nodes; var count = Object.keys(myArr).length; console.log("counting :", count) }); return count };

cuando llamo a esta función, el count es cero, sin embargo, es el valor correcto dentro de fs.readFile . ¿Cómo puedo devolver el valor actualizado de count ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

fs.readFile es una función asíncrona, por lo que cuando su función devuelve count , el archivo aún no se ha abierto.

Esto es lo que puedes hacer:

 function metaInfo (id, callback){ var dir = 'files/'+id; var count = 0 fs.readFile(__dirname +'/' + dir+'/myfile.json', 'utf8', function (err, data) { if (err) throw err; obj = JSON.parse(data); var myArr = obj.nodes; count = Object.keys(myArr).length; callback(count); }); }; metaInfo("yourId", function(count) { // Here is your count });

O

usar fs.readFileSync

Aquí hay un buen ejemplo

Espero eso ayude,

Saludos,

over 4 years ago · Santiago Trujillo Denunciar

0

fs.readFile es una llamada asíncrona.

puede usar una función como devolución de llamada e invocarla al final de su llamada asíncrona o puede envolver su llamada en una promesa

 var Promise = require('bluebird'); var MyReadFileAsync = function (filename) { return new Promise(function (resolve, reject) { fs.readFile(filename, 'utf8', function (err, data) { if (err) reject(err); obj = JSON.parse(data); var myArr = obj.nodes; resolve(Object.keys(myArr).length); }); }); }; MyReadFileAsync(__dirname +'/' + dir+'/myfile.json').then(function(counter){ var myCounterUpdated = counter; })
over 4 years ago · Santiago Trujillo Denunciar

0

Es un problema asíncrono con su código.

Debería usar la biblioteca "async" para NodeJS. Documentación asíncrona

Por ejemplo, puede envolver su:

 fs.readFile(__dirname +'/' + dir+'/myfile.json', 'utf8', function (err, data) { if (err) throw err; obj = JSON.parse(data); var myArr = obj.nodes; var count = Object.keys(myArr).length; console.log("counting :", count) });

Para :

 async.waterfall([ function(callback) { fs.readFile(__dirname +'/' + dir+'/myfile.json', 'utf8', function (err, data) { if (err) throw err; obj = JSON.parse(data); var myArr = obj.nodes; var count = Object.keys(myArr).length; console.log("counting :", count); callback(null, count); }); } ], function (err, result) { // result now equals = count return result; });
over 4 years ago · Santiago Trujillo 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