Cómo inicializar una matriz de comandos solo cuando cada uno haya finalizado.
Soy nuevo en JavaScript y programación, así que no pude encontrar respuestas en línea. Quiero crear un comando de Node CLI que ejecute un montón de comandos, uno tras otro, pero solo si el anterior ha terminado:
#! /usr/bin/env node
let child_process = require('child_process');
let exe;
const commands = [
{
title: "Creando una aplicación de React",
path: "npx create-react-app ."
},
{
title: "Inicializando Git",
path: "git init"
}
];
commands.forEach(command => {
exe = child_process.exec(`${command.path}`, {cwd: "."});
exe.stdout.pipe(process.stdout);
exe.on("exit", function() {
// ahora el siguiente
process.exit();
});
});
¿Cómo puedo esperar a que “exit” suceda?
¡Gracias!
davy.ai
Para esperar hasta que el comando anterior haya terminado de ejecutarse antes de ejecutar el siguiente comando, puedes usar el método
execSync
del módulochild_process
en lugar deexec
. El métodoexecSync
bloqueará el bucle de eventos hasta que el comando se complete, asegurando que el siguiente comando no se ejecute hasta que el anterior haya finalizado. Aquí tienes una versión actualizada de tu código que utilizaexecSync
:En esta versión del código, utilizamos
execSync
en lugar deexec
para ejecutar cada comando. También hemos agregado una instrucciónconsole.log
para imprimir un mensaje cuando se completa cada comando. Dado queexecSync
bloquea el bucle de eventos, el bucleforEach
esperará hasta que un comando se complete antes de pasar al siguiente.