我需要运行几个子进程并等待它们完成,而不是使用长链回调我使用Q promises。然而,无论我尝试什么,都会执行子进程,而Q只是继续而不等待结果。
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,结果与回调和基于事件相同。
我还尝试将Promises包装在返回的函数中。