Ich habe, was ich ein seltsames Problem nennen .. Ich denke, Es ist im Zusammenhang, wie Knoten arbeitet asynchron, aber ich kann nicht herausfinden, wie es zu lösen ..NodeJS fs.stat innerhalb einer Schleife
ich habe den folgenden Code:
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);
});
}
Dies ergibt die folgende Ausgabe:
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
Wie Sie aus dem Code sehen können, zunächst nur, dass ich in der Schleife eine Ausgabe der Pfadzeichenfolge geben. Innerhalb dieser Schleife mache ich dann einen Stat für jeden Pfad (Element) innerhalb des Directors. Was passiert, wenn ich die Pfadvariable im fs.stat-Callback verwende, bezieht sich dies auf die letzte Datei "Arendal" und nicht auf jedes einzelne Element in der Schleife. Die isDirectory bool ist eigentlich richtig nach der Liste der Dateien und Verzeichnisse, aber es ist auch wichtig für mich, den richtigen Pfad mit dem angegebenen isDirectory bool ..
So lösen Sie das?
Perfekt, löste mein Problem. Eigentlich nicht nur ein Kommandozeilen-Tool. Es wird versucht, ein "intelligentes" Synchronisierungstool für sehr große Dateistrukturen/viele Dateien mit AWS zu erstellen. Ich denke, async ich vorteilhaft. – chranmat
@chranmat Dann würde ich vorschlagen, dass Sie sich Versprechungen anschauen und async/erwarten, mit solchen asynchronen Aktionen umzugehen (schauen Sie sich die andere Antwort an). –