Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

120
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda