【发布时间】:2016-11-13 00:57:46
【问题描述】:
我想创建一个程序,在其中我从目录中读取文件,然后在其他目录中 grep 这些名称。
代码如下:
var exec = require('child_process').exec;
var internalCount = 0;
var i = -1;
for (; i < fileNamesInDir.length / 2;) {
if (i === internalCount) {
continue;
}
(function () {
i = internalCount;
var j = i;
exec('grep -nre js/' + fileNamesInDir[j] +
' ./ --exclude-dir=node_modules --exclude=searchResults.txt',
function (error, stdout, stderr) {
outputString += "\n";
outputString +=
"***********************************************************";
outputString += "\n";
outputString += "RESULTS FOR ::" + fileNamesInDir[j];
outputString += "\n";
outputString +=
"***********************************************************";
outputString += "\n";
outputString += stdout;
outputString += "\n";
if (++internalCount === fileNamesInDir.length) {
writeToFile();
}
});
})();
}
问题是执行语句不是同步的,回调函数异步返回数据。为了解决这个问题,如果迭代索引与该变量相同,我采用了另一个变量并继续 for 循环。但是,使用此代码,它会进入无限循环,不会触发任何 exec 语句。
【问题讨论】:
-
你在哪里增加
i? -
是的..一旦回调函数执行..internalcount 就会增加。所以对于下一次迭代 i 不等于 internalCount 然后 continue 不会发生并且自执行函数将运行
标签: javascript node.js exec fs