Javascript Js-连续命令后退出exec
我正在按顺序执行一些git命令,特别是,我遵循一个git流模型 e、 g.当完成一个功能时,我运行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 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
您可以通过以下方式实现:
总的来说,找到一个能做到这一点的库要比手工寻找自己的解决方案要好
然而,这是不借助第三方库就可以做到这一点的最佳方法吗
没有
其他人是怎么做到的
还有三种其他解决方案:
- 就用那个图书馆吧。被使用是它的全部目的
- 改造那个图书馆。因为不管有什么好处,它不再是第三方了
- 使用承诺!(和部分应用)
- 就用那个图书馆吧。被使用是它的全部目的
- 改造那个图书馆。因为不管有什么好处,它不再是第三方了
- 使用承诺!(和部分应用)
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
})