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

106
Vistas
Sincronice la salida de eventos de generación y transmisión NodeJS

Quiero ejecutar un conjunto de scripts de prueba usando NodeJS, genera resultados de prueba mientras se ejecuta. Quiero que estos diferentes scripts de prueba se ejecuten sincrónicamente y también generen los resultados durante la ejecución.

Intenté usar la función spawnSync() del proceso secundario, sin embargo, no genera datos durante la ejecución del comando.

 const { spawnSync } = require("child_process") const cmd = spawnSync('./gradlew',['test'],{cwd : '../../../'}) console.log(`Output: ${cmd.stdout}`)

El código anterior genera los resultados solo cuando la tarea ha completado la ejecución por completo. Creo que este es el comportamiento esperado de spawnSync.

Por lo tanto, intenté ejecutar spawn () dentro de una función asíncrona con espera para sincronizarla, no estoy seguro de si este enfoque es correcto.

 const { spawn } = require("child_process") const cmd = spawn('./gradlew',['test'],{cwd : '../../../'}) const cmd1 = spawn('./gradlew',['test'],{cwd : '../../../'}) async function runFeature(){ console.log("Running feature....") cmd.stdout.on('data', (data) => { console.log(`Output: ${data}`); }); } async function runFeature1(){ console.log("Running feature 1....") cmd1.stdout.on('data', (data) => { console.log(`Output1: ${data}`); }); } async function main(){ try{ console.log("Starting...") await runFeature() await runFeature1() process.exit(0) } catch(e){ console.error(e) process.exit(1) } } main()

Al ejecutar el código anterior, el comando finaliza sin ningún resultado de la siguiente manera. Parece que el método cmd.stdout.on() no se ejecuta.

 harrym@HarryM:~/Project/test$ node run-test.js Starting.. Running feature.... Running feature 1.... harrym@HarryM:~/Project/test$

¿Hay algo de malo en esta forma de abordar?. Realmente necesito ayuda para depurar este problema. Además, cualquier sugerencia para sincronizar un proceso secundario mientras se genera un flujo de datos en vivo sería muy apreciada.

Gracias de antemano :)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si usa el nodo 10 o superior, puede usar la función de iterador genérico como esa:

 const { spawn } = require('child_process'); (async () => { try { const lsSpawn = spawn('ls', ['-l'], { cwd: '../../../' }); let error = ''; for await (const chunk of lsSpawn.stderr) { error += chunk; } if (error) { console.error('error', error); return; } let data = ''; for await (const chunk of lsSpawn.stdout) { data += chunk; } if (data) { console.log('data', data); } } catch (e) { console.error('execute error', e); } })();

Uso for await en lsSpawn.stderr y lsSpawn.stdout

Sugerencia: si desea usar la promesa, no se mezcle con event.on , debe convertir event.on al formato de promesa.

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