ノードを使用してサブディレクトリを含むディレクトリに含まれる一意のファイル名のリストを取得したいと考えていましたが、各コールバックの結果を組み合わせるのに問題がありました。コールバックからファイル名をログに記録するだけで発生する重複操作を避けたいと思っていfs.stat
ます。
var distinct = {};
function getNames(root) {
fs.readdir(root, function(err, list) {
list.forEach(function(file) {
file = root + '/' + file;
fs.stat(file, function(err, stat) {
if (!err && stat.isDirectory()) {
getNames(file);
} else {
distinct[path.basename(file)] = true;
}
});
});
});
}
// perform various operations on unique filename list
console.log(Object.keys(distinct));
もちろん、これはconsole.log()
関数の呼び出しが早すぎて、望ましくない結果をもたらします。作業する一連のファイル名を取得するにはどうすればよいですか。readdirSync
非同期メソッドを使用して、つまりandを使用せずにこれを行う良い方法はありstatSync
ますか?