Ich habe einen Code unten, der alle Dateien in einem Verzeichnis mit bestimmten Schlüsseln und Werten zurückgibt. Einer dieser Schlüssel, die ich sein möchte, ist Directory mit einem booleschen Wert.Knoten Promise Rückgabeobjekt mit Wert der aufgelösten Versprechen
Der folgende Code funktioniert gut, aber ich fragte mich, ob es eine Möglichkeit gab, die Promise.all/iterating über Versprechen zu entfernen und stattdessen den aufgelösten Wert der stat.isDirectory()
auf meine Dateien Objekte direkt in meiner Karte.
Meine Lösung Ich habe versucht, aber nicht:
Ich habe versucht, so etwas wie dieses:
isDirectory: fs.statAsync(path).then((stat) => stat.isDirectory())
Und dann tun ein Promise.all auf den alle isDirectory
Tasten
Arbeits Code:
const Promise = require('bluebird'),
os = require('os'),
_ = require('lodash'),
fs = Promise.promisifyAll(require('fs')),
desktopPath = `${os.homedir()}/Desktop`;
let files = [];
return fs.readdirAsync(desktopPath)
.then((filesName) => files = _.map(filesName, (fileName) => ({
path: `${desktopPath}/${fileName}`,
name: fileName,
ext: _.last(fileName.split('.'))
})))
.then(() => Promise.all(_.map(files, (file) => fs.statAsync(file.path))))
.then((stats) => _.forEach(stats, (stat, idx) => {
files[idx].isDirectory = stat.isDirectory();
}))
.then(() => {
console.log(files);
})
Gibt es trotzdem den Promise.all und _.forEach Teil am Ende zu entfernen? Und machen Sie stattdessen diese Aktionen in meiner Karte?