我在下面有一些代碼將返回某個目錄中的某些鍵和值的所有文件。我想要的其中一個鍵是具有布爾值的isDirectory。節點Promise返回對象的值爲已解決的承諾
下面的代碼工作得很好,但我想知道是否有辦法刪除Promise.all /迭代承諾,而是直接在我的地圖中將解析值stat.isDirectory()
推送到我的文件對象。
我的解決辦法我試過,但失敗:
我想是這樣的:
isDirectory: fs.statAsync(path).then((stat) => stat.isDirectory())
然後做一個Promise.all上的所有isDirectory
鍵
工作代碼:
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);
})
無論如何要刪除最後的Promise.all和_.forEach部分?而是在我的地圖中執行這些操作?