Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待子进程链完成Q承诺_Javascript_Node.js_Q_Child Process - Fatal编程技术网

Javascript 等待子进程链完成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

我需要运行几个ChildProcess并等待它们完成,而不是使用长链回调,而是使用Q承诺。不管我怎么做,都会执行childprocess,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,结果都是回调和基于事件的


我还尝试过将承诺封装在返回函数中。

您似乎想等到
stdout
流关闭?我尝试过使用spawn进程。spawn.on(“close”),具有相同的结果。除非您使用的是旧版本的API,否则您希望
返回Q.Promise…
而不是
返回新的Q.Promise…
哦,一定错过了,谢谢。但是,不会对结果做任何事情。首先,如果您不想在第一个失败的命令上失败聚合承诺,请使用Q.allsolited()而不是all()。此外,您可能希望使用“子进程承诺”包装,而不是编写自己的包装。