我认为我在变量范围方面遇到了麻烦。最后,我正在创建一个包含某些文件的文本日志,并使用以下代码修改其日期:
var fs = require('fs');
fs.writeFileSync('./scan_log.txt', "");
for(e in extensions){
createScanLogHeader(extensions[e]);
for (l in lines){
if(lines[l].indexOf(extensions[e]) > -1){
var fileMtime = getFileProperty(lines[l], "mtime");
fs.appendFileSync('./scan_log.txt', fileMtime + " " + lines[l] + "\n");
}
}
}
function getFileProperty(path, prop){
fs.stat(path, function(err, stats){
return stats.prop;
});
}
我在文件路径之前加上“undefined”而不是mtime文件属性。但是,如果我在console.log(stats.prop)
上面getFileProperty
函数中加return stat.prop
,我会将正确的信息记录到控制台。
答案 0 :(得分:0)
您的stat
来电是异步的,而您的getFileProperty
函数未定义return
值,因此会返回undefined
。
使用statSync
并返回其值,或将回调传递给getFileProperty
。
for (l in lines){
if(lines[l].indexOf(extensions[e]) > -1){
getFileProperty(lines[l], "mtime", function(path, prop) {
fs.appendFileSync('./scan_log.txt', prop + " " + path + "\n");
});
}
}
function getFileProperty(path, prop, fn){
fs.stat(path, function(err, stats){
fn(path, stats[prop])
});
}
答案 1 :(得分:0)
这不是范围问题,而是来自return stats.prop;
的回调的stat
。由于stat
是异步的,因此回调的返回值没有意义(如果确实如此,它仍会在以后发生,与调用getFileProperty
异步)。
如果您绝对必须让getFileProperty
返回值,那么您必须使用statSync
。 return
必须来自getFileProperty
,而不是您传递的回调stat
。
答案 2 :(得分:0)
不熟悉node.js框架,但有点google搜索显示fs.stat(path,function)是异步的;所以基本上当你打电话
var fileMtime = getFileProperty(lines[l], "mtime");
你输入 getFileProperty ,立即返回,所以异步返回stats.prop基本上没有了...我想你应该是使用 fs.statSync(path) insteaad,这是同步版本。