1

我认为我在变量范围方面遇到了麻烦。最终,我正在创建一个文本日志,其中包含某些文件及其上次使用此代码修改的日期:

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;
    });
}

我在文件路径而不是 mtime 文件属性之前添加了“未定义”。但是,如果我console.log(stats.prop)getFileProperty上面的函数中添加一个,return stat.prop我确实会在控制台中记录正确的信息。

4

3 回答 3

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])
    });
}
于 2013-01-27T00:02:06.233 回答
0

这不是范围问题,而是return stats.prop;从. 由于是异步的,回调的返回值没有意义(如果有,它仍然会在以后发生,与对 的调用异步)。statstatgetFileProperty

如果您绝对肯定必须getFileProperty 返回该值,则必须statSync改用。return必须来自,而getFileProperty不是您传递的回调stat

于 2013-01-27T00:02:09.007 回答
0

不熟悉node.js框架,但是google了一下发现fs.stat(path,function)是异步的;所以基本上当你打电话时

var fileMtime = getFileProperty(lines[l], "mtime");

您输入立即返回的getFileProperty,因此异步返回 stats.prop 基本上无处可去...我认为您应该使用fs.statSync(path) insteaad,这是同步版本。

于 2013-01-27T00:08:49.443 回答