es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , , ,

Answer

  1. Avatar for 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ódulo child_process en lugar de exec. El método execSync 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 utiliza execSync:

    #! /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.execSync(`${command.path}`, {cwd: `.`});
      console.log(`${command.title} completado`);
    });
    

    En esta versión del código, utilizamos execSync en lugar de exec para ejecutar cada comando. También hemos agregado una instrucción console.log para imprimir un mensaje cuando se completa cada comando. Dado que execSync bloquea el bucle de eventos, el bucle forEach esperará hasta que un comando se complete antes de pasar al siguiente.

Comments are closed.