Javascript 等待子进程链完成Q承诺
我需要运行几个ChildProcess并等待它们完成,而不是使用长链回调,而是使用Q承诺。不管我怎么做,都会执行childprocess,Q只是继续,而不等待结果Javascript 等待子进程链完成Q承诺,javascript,node.js,q,child-process,Javascript,Node.js,Q,Child Process,我需要运行几个ChildProcess并等待它们完成,而不是使用长链回调,而是使用Q承诺。不管我怎么做,都会执行childprocess,Q只是继续,而不等待结果 var clones = repositores.map(function (project) { return Q.Promise(function (fullfill, reject) { require('child_process').exec('cd ' + clonepath + ' &&a
var clones = repositores.map(function (project) {
return Q.Promise(function (fullfill, reject) {
require('child_process').exec('cd ' + clonepath + ' && git clone ' + project.repourl, function (err, stdout, stderr) {
console.log(stdout);
if (err) {
console.log(stderr);
reject(err);
}
else {
fullfill();
}
});
})
});
Q.all(clones).then(function(){
console.log("Clones complete");
}).done();
这将给出“克隆完成”,然后是克隆结果
我尝试过child_process.spawn、fork、exec、execFile,结果都是回调和基于事件的
我还尝试过将承诺封装在返回函数中。您似乎想等到
stdout
流关闭?我尝试过使用spawn进程。spawn.on(“close”),具有相同的结果。除非您使用的是旧版本的API,否则您希望返回Q.Promise…
而不是返回新的Q.Promise…
哦,一定错过了,谢谢。但是,不会对结果做任何事情。首先,如果您不想在第一个失败的命令上失败聚合承诺,请使用Q.allsolited()而不是all()。此外,您可能希望使用“子进程承诺”包装,而不是编写自己的包装。