Javascript Js-连续命令后退出exec

Javascript Js-连续命令后退出exec,javascript,node.js,electron,async.js,Javascript,Node.js,Electron,Async.js,我正在按顺序执行一些git命令,特别是,我遵循一个git流模型 e、 g.当完成一个功能时,我运行 git pull git push -u origin branchname git pull origin develop git checkout develop git merge branchname git push 我使用node.js中的exec模块运行这些命令,并将它们一个接一个地链接起来,如: exec(command1, (err, stdout, stderr)

我正在按顺序执行一些git命令,特别是,我遵循一个git流模型

e、 g.当完成一个功能时,我运行

git pull
git push -u origin branchname
git pull origin develop
git checkout develop
git merge branchname
git push
我使用node.js中的
exec
模块运行这些命令,并将它们一个接一个地链接起来,如:

exec(command1,
     (err, stdout, stderr) => {
            if(err != null) {
                  //display an error message
                  return
            } else {
                  exec(command2, (err, stdout, stderr) =>{ ... }
            }

      }
)
等等。输出正常工作,订单正常工作。然而,如果其中一个命令失败,我就脱离了这个链条


我知道有一个异步库,我可以使用它来达到同样的效果。然而,这是不借助第三方库就可以做到这一点的最佳方法吗?其他人是如何做到这一点的?

使用
async
您可以通过以下方式做到这一点:


通常情况下,找到一个实现这一点的库要比手工整理自己的解决方案要好。

使用
async
您可以通过以下方式实现:

总的来说,找到一个能做到这一点的库要比手工寻找自己的解决方案要好

然而,这是不借助第三方库就可以做到这一点的最佳方法吗

没有

其他人是怎么做到的

还有三种其他解决方案:

  • 就用那个图书馆吧。被使用是它的全部目的
  • 改造那个图书馆。因为不管有什么好处,它不再是第三方了
  • 使用承诺!(和部分应用)

然而,这是不借助第三方库就可以做到这一点的最佳方法吗

没有

其他人是怎么做到的

还有三种其他解决方案:

  • 就用那个图书馆吧。被使用是它的全部目的
  • 改造那个图书馆。因为不管有什么好处,它不再是第三方了
  • 使用承诺!(和部分应用)


我想你实际上在寻找的是一个shell脚本,而不是节点模块。只要使用
if(!err)
?@Bergi我使用的是
if(!err)
,而且我正在开发Electron。你在发布的代码中没有显示这一点。请回答您的问题并提供您的实际代码。刚刚更新!我也更新了我问题的措辞。我想你实际上在寻找的是一个shell脚本,而不是节点模块。只需使用
if(!err)
?@Bergi我使用的是
if(!err)
,而且我正在开发Electron。你在发布的代码中没有显示这一点。请回答您的问题并提供您的实际代码。刚刚更新!我也更新了我的问题的措辞。我将尝试按照我在问题中链接的答案的路线。谢谢你的反馈!我将尝试按照我在问题中链接的stackoverflow答案的路线。谢谢你的反馈!
var commands = [
  'git pull',
  'git checkout',
  '...'
];

eachSeries(commands, (command, cb) => {
  exec(command, (err, stdout, stderr) => {
    cb(err);
  });
});
function makeExec(command) {
    return function(/* ignore results */) {
        return new Promise(function(resolve, reject) {
            child_process.exec(command, function(err, stdout, stderr) {
                if (err != null) reject(Object.assign(err, {stderr}));
                else resolve(stdout);
            });
        });
    });
}
Promise.resolve()
.then(makeExec("git pull"))
.then(makeExec("git push -u origin branchname"))
.then(makeExec("git pull origin develop"))
.then(makeExec("git checkout develop"))
.then(makeExec("git merge branchname"))
.then(makeExec("git push"))
.catch(function(err) {
    //display an error message
})