提前感谢您查看此内容。
我在一个不起作用的循环中有一个异步任务。我已确保:
- 将我的循环变量“key”包装在一个闭包中以避免经典的“仅最后一个值”问题,其中循环在异步任务返回值之前很久就完成了,并且只显示最后一个值。
- 调用 done(error) 来完成我的异步任务(根据 Gruntjs FAQ)
- 使用 hasOwnProperty() 确保键是对象的实际属性,而不是来自原型。
- 遵循 node.exec 示例的格式,除了将 exec 的值分配给一个变量——我试过了,但没有帮助。请参阅下面的第一个参考。
这个函数输出......什么都没有!?由于某种原因, grunt.log.writeln 语句甚至没有触发。任务完成没有错误。我还尝试添加 20 秒的延迟,以防脚本在异步任务返回之前完成。奇怪的是,如果我不调用“done(error)”,文件就会被写入文件(当我用 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