我正在开展一项艰巨的任务,安装wordpress svn repo中的最新wordpress插件,这是通过命令行任务完成的。
理想情况下,我希望这是同步完成的,以便我可以在每个插件安装时看到输出(通过svn co
)..但似乎exec
只是执行而不等待,所以使用{ {1}}和var done = this.async()
适用于单个异步操作,但不是多个,就像在这种情况下一样......我缺少什么?
done(error)
答案 0 :(得分:0)
你的问题是你每次通过循环调用done
(又名this.async())但grunt并不知道你有循环。你需要拥有自己的回调来跟踪所有异步事件的完成时间,然后只调用grunt的this.async()。
或者,在网上搜索" node exec synchronous"如果它是你想要的,那么将会找到很多方法来完成这项任务。
答案 1 :(得分:0)
在收到stdout消息之前,您正在调用done
。聆听事件,以便在实际完成时获得通知......这些内容如下:
exec(cmd, function (error, stdout, stderr) {
stdout.on('data', function(data){
grunt.log.writeln('Installing WordPress Plugin: "' + plugin + '"');
grunt.log.writeln(stdout);
done();
});
stderr.on('data', function(err){
done(err);
});
});