Ich versuche rekursiv einen Verzeichnisbaum zu gehen und alle Dateinamen zu sammeln. Im folgenden Code, jedoch läuft der console.log()
am Ende zu früh warten, nicht für die von der Funktion des rekursiven cacheDir
Aufruf erzeugt Versprechen zu beheben:Warten, bis alle Versprechen gelöst sind, während ich rekursiv ein Verzeichnis durchläuft
function cacheDir(dir) {
return fs.readdir(dir).then(items => {
const readDirPromises = []
for (let item of items) {
const fullPath = path.join(dir, item)
const lstat = fs.lstat(fullPath)
readDirPromises.push(lstat)
lstat.then(stats => {
if (stats.isFile()) {
return fullPath
} else {
return cacheDir(fullPath)
}
})
}
return Promise.all(readDirPromises)
})
}
cacheDir("../someDir/")
.then(results => console.log('done!', results))
Was mache ich falsch? Es scheint mir, dass readDirPromises
wird ein Array von strings
und verspricht, jedes Versprechen von denen wird sich zu einer Reihe von Strings und verspricht zu lösen.
Dank, war nicht klar, dass 'dann()' ein neues Versprechen gibt! – maxedison
@maxedison - So funktioniert die Verkettung. Das neu zurückgegebene Versprechen wartet auf jede Zusage, die von der '.then()' zurückgegeben wird, und so erhalten Sie eine Kette. – jfriend00