私は奇妙な問題を呼ぶようなものを持っている..私は.. it'sは、ノードが非同期的にどのように機能するかに関係しますが、私はそれを解決する方法を見つけ出すことができないと思いますNodeJS
私は、次のコードを持っている:あなたが最初に私はちょうどループ内でパス文字列の出力が得られ、コードから見ることができるように
START: ./data/2017
Loop files/folders : ./data/2017/.DS_Store
Loop files/folders : ./data/2017/1
Loop files/folders : ./data/2017/2
Loop files/folders : ./data/2017/3
Loop files/folders : ./data/2017/Arendal2017.pptx
fs.stats file path : ./data/2017/Arendal2017.pptx : false
fs.stats file path : ./data/2017/Arendal2017.pptx : true
fs.stats file path : ./data/2017/Arendal2017.pptx : true
fs.stats file path : ./data/2017/Arendal2017.pptx : true
fs.stats file path : ./data/2017/Arendal2017.pptx : false
:
function traverse(dir) {
console.log("START: " + dir);
fs.readdir(dir, function(err, list) {
list.forEach(function(element) {
path = dir + "/" + element
console.log("Loop files/folders : " + path);
fs.stat(path, function(err, stats,) {
console.log("fs.stats file path : " + path + " : " + stats.isDirectory())
});
}, this);
});
}
これは、次の出力が得られます。そして、この同じループの中で、ディレクターの中のすべてのパス(要素)についてstatを実行します。ここでは、fs.statコールバックでpath変数を使用すると、ループの個々の項目ではなく、最後のファイル "Arendal"が参照されます。 isDirectory boolは実際にはファイルとディレクトリのリストに従って正しくありますが、指定されたisDirectory boolで正しいパスを取得することも重要です。
これを解決するにはどうすればよいですか?
完璧な、私の問題を解決しました。実際にはコマンドラインツールだけではありません。非常に大きなファイル構造/多数のファイルに対して、AWSに「スマート」な同期ツールを作成しようとしています。私は非同期私は有益だと思います。 – chranmat
@chranmat次に、非同期アクションを扱うための約束と非同期/待機を見てみることをお勧めします(他の回答を見てください)。 –