Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 循环中的节点Grunt异步任务,关闭不起作用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
提前谢谢你看看这个.

我在一个无效的循环中有一个异步任务.我已经确定:

>在循环中包装循环变量“key”以避免经典的“最后一个值”
只有“问题,在异步任务返回值之前循环完成很长时间,并且只显示最后一个值.
>调用完成(错误)以完成我的异步任务(根据Gruntjs常见问题解答)
>使用hasOwnproperty()确保键是对象的实际属性,而不是来自原型.
>遵循node.exec示例的格式,除了将exec的值赋给变量 – 我已尝试过,但它没有帮助.见下面的第一个.

这个功能输出……什么都没有!?由于某种原因,grunt.log.writeln语句甚至没有触发.任务完成且没有错误.我还尝试添加一个20秒的延迟,以防脚本在异步任务返回之前完成.奇怪的是,如果我不调用“完成(错误)”,文件将被写入文件(当我用grunt.file.write语句替换writeln时).

var done = this.async(),exec = require('child_process').exec,myJSON = {
      "file1" : "C:/home/me/jquery.js","file2 " : "C:/home/me/grunt.js",...
      "fileN" : "C:/home/me/N.js"
    },count;

for (var key in myJSON) {
    if (myJSON.hasOwnProperty(key)) {
      (function (key) { 
        exec( 'type "' + myJSON[key] + '"',function(error,stdout,stderr) {
            if (error) {
                grunt.log.writeln('!!! exec error: ' + error);
            }
            grunt.log.writeln('stdout: ' + stdout);
            grunt.log.writeln('stderr: ' + stderr);
            done(error);
          }
        );
      })(key);
    count++;
  }
}

文献:

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
https://github.com/gruntjs/grunt/wiki/Frequently-Asked-Questions

解决方法

只应在整个操作完成时调用done(),这意味着所有exec()方法都运行了它们的回调.目前,您正在每次迭代时执行完成回调.您可以通过在grunt附带的节点模块 async中使用forEach方法轻松实现此目的(grunt.util.async(或者如果您希望按顺序执行exec()方法,则为forEachSeries).

像这样的东西(未经测试):

var done = this.async();
var exec = require('child_process').exec;
var async = grunt.util.async; // updated
var myJSON = {
  "file1": "C:/home/me/jquery.js","file2": "C:/home/me/grunt.js",...
  "fileN": "C:/home/me/N.js"
};

async.forEach(Object.keys(myJSON),function(el,cb) {
  exec('type "' + myJSON[el] + '"',stderr) {
      if (error) {
          grunt.warn('!!! exec error: ' + error)
          return cb(error);
      }
      grunt.log.writeln('stdout: ' + stdout);
      grunt.log.writeln('stderr: ' + stderr);
      cb();
    }
  );
},function(error) {
  done(!error);
});

大佬总结

以上是大佬教程为你收集整理的node.js – 循环中的节点Grunt异步任务,关闭不起作用全部内容,希望文章能够帮你解决node.js – 循环中的节点Grunt异步任务,关闭不起作用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。