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 ファイル プロパティではなく、ファイル パスの前に "undefined" が付加されます。ただし、上記console.log(stats.prop)getFileProperty関数に a を入れる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からでなければなりません。getFilePropertystat

于 2013-01-27T00:02:09.007 に答える