完成第一个命令后,节点exec bash命令

时间:2020-08-12 19:39:17

标签: node.js bash terminal

使用Node自动化我的某些bash进程。

const { exec } = require("child_process");

let buildCommand = "docker build -t vm1:v1 ./nginx1 " 
let runCommand = "docker run -d -p 6001:6001 --name clientvm1 vm1:v1"


//run first command

 exec(buildCommand, (error, stdout, stderr) => {
    if (error) {
        console.log(`error: ${error.message}`);
        return;
    }
    if (stderr) {
        console.log(`stderr: ${stderr}`);
        return;
    }
    console.log(`stdout: ${stdout}`);
});

//run second command

   exec(runCommand, (error, stdout, stderr) => {
    if (error) {
        console.log(`error: ${error.message}`);
        return;
    }
    if (stderr) {
        console.log(`stderr: ${stderr}`);
        return;
    }
    console.log(`stdout: ${stdout}`);
});

让第二条命令等待第一条命令完成的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我当然不是专家,但是也许您可以将第二种方法包装在异步方法中,然后等待第一种方法进入内部?

method1() {
  return new Promise((resolve, reject) => {
    resolve(exec(buildCommand));
  }).catch((err) => throw new Error(err));
}

async method2() {
  await method1();
  exec(runCommand);
}

这可能远非万无一失,但我认为它应该可以满足您的需求。