如何在Grunt自定义任务中处理多个异步请求?

时间:2014-09-13 18:53:28

标签: node.js gruntjs

我正在开展一项艰巨的任务,安装wordpress svn repo中的最新wordpress插件,这是通过命令行任务完成的。

理想情况下,我希望这是同步完成的,以便我可以在每个插件安装时看到输出(通过svn co)..但似乎exec只是执行而不等待,所以使用{ {1}}和var done = this.async()适用于单个异步操作,但不是多个,就像在这种情况下一样......我缺少什么?

done(error)

2 个答案:

答案 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);
        });
    });
相关问题