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

127
Vistas
Devolver variable en la devolución de llamada del módulo de nodo

Estoy usando este paquete NPM para obtener la salida CSV de la tabla desde una base de datos de acceso.

Tengo mi función estructurada de la siguiente manera:

 function createDB(mdbfile){ var rawDB = mdb(mdbfile); var db = {} rawDB.tables(function(err, table){ table.forEach(function(item){ var rawTable = null; rawDB.toCSV(item, function(err, csv){ rawTable = csv; //Doesn't work }); console.log(rawTable); //Always null :( var newTable = Do stuff with CSV; db.item = newTable; }); }); return db }

Estoy seguro de que se trata de un problema de alcance, pero soy nuevo en el nodo y no sé cómo buscarlo correctamente. Por lo que puedo decir, el módulo es síncrono pero el alcance no funciona.

¡Cualquier ayuda sería apreciada! Desafortunadamente, un cliente que tengo DEBE usar el archivo DB de acceso y solo estoy tratando de hacer que esto funcione.

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

0

El alcance se ve bien, pero la función toCsv no parece sincrónica. Puede verificar dos veces el código fuente: https://github.com/maxogden/node-mdb/blob/master/index.js . Por lo tanto, intentaría imprimir rawTable antes de llamar a la devolución de llamada toCsv.

También agregaría el manejo adecuado de errores dentro de ambas devoluciones de llamada para ver si está recibiendo algún error.

EDITAR:

Dado que su función createDB realiza llamadas asincrónicas, debería recibir una devolución de llamada. El siguiente código es un ejemplo que posiblemente podría funcionar para su caso.

 // look into the async module, specifically forEach const asyncForEach = require('async/forEach'); function createDB(mdbfile, next ){ var rawDB = mdb(mdbfile); var db = {} rawDB.tables(function(err, table){ if( err ) return next(err); asyncForEach( table, function(item, cb){ rawDB.toCSV(item, ( err, csv )=>{ if( err ) return cb( err ); // this processing can be done here or in the callback to asynForEach var newTable = Do stuff with CSV; db.item = newTable; cb(null, csv); }; }, function(err, csvs){ // csvs can be processed and added to db here as well if ( err ) return next( err ); return next( null, db ); } ); } ); }

Entonces tendría que proporcionar una devolución de llamada a createDB cuando lo llame:

 createDB( mdbFile , ( err, db )=>{ if( err ) return err; // use db eg res.send( db ) }

O podría investigar cómo lograr esto con promesas.

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