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

118
Vistas
Las operaciones asíncronas de nodo en child_process no están finalizando

Tengo un pequeño script que ejecuta un childprocess usando execFile . Este proceso secundario también es un script de nodo que ejecuta operaciones async , pero parece que las async nunca terminan, por lo que la terminal y todos los procesos están en espera.

Este es el script principal que ejecuta execFile para el proceso secundario:

 fs.readdir(directoryPath, function(err, files) { if (err) console.log(`Error: ${err}`); files.map((file) => { execFile(`node`, ["updater.js", "BMW", file], (error, stdout, stderr) => { if (error) { red(`error: ${error.message}`); return; } if (stderr) { red(`stderr: ${stderr}`); return; } console.log(stdout); }); }); });

Y este es el script de nodo ejecutado como proceso secundario:

 const args = process.argv.slice(2); const brand = args[0]; const model = args[1]; const data = readJSON(`./json-export/${brand}/${model}`); const generations = data.generations; const generationsDB = await getGenerationsByModelAndBrand(brand, model); console.log(generationsDB); generations.map((generation) => { const lastModification = generation.modifications.modification[ generation.modifications.modification.length - 1 ]; console.log(lastModification); });

Todo el código funciona si comento la línea const generationsDB y el siguiente console.log . Si no, cuando la ejecución llega a la solicitud async , la ejecución se atasca allí. getGenerationsByModelAndBrand en el script principal y funciona sin problemas.

getGenerationsByModelAndBrand ejecuta una consulta en la base de datos y devuelve una Promise .

Este es el código del método getGenerationsByModelAndBrand :

 export const getGenerationsByModelAndBrand = (brand, model) => { return new Promise((resolve, reject) => { const sql = `DATABASE SELECT`; connection.query(sql, function(error, result) { if (error) return reject(error); return resolve(result); }); }); };

La connection proviene del método mysql.createConnection del paquete mysql .

Creo que el problema proviene del manejo de la promesa en el proceso secundario, es como si me faltara algo pero no pude encontrar qué es.

Editar: después de investigar, no encontré una solución o explicación para este problema, por lo tanto, mientras tanto, moví getGenerationsByModelAndBrand al script principal y pasé el resultado como parámetro.

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