【发布时间】:2017-07-18 06:34:35
【问题描述】:
我下面有一些代码将返回目录中具有特定键和值的所有文件。我想成为的键之一是带有布尔值的 isDirectory。
下面的代码工作得很好,但我想知道是否有办法删除 Promise.all/iteration over promises,而是直接在我的地图中将 stat.isDirectory() 的解析值推送到我的文件对象。
我尝试过但失败的解决方案:
我尝试过这样的事情:
isDirectory: fs.statAsync(path).then((stat) => stat.isDirectory())
然后对所有 isDirectory 键执行 Promise.all
工作代码:
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 部分?而是在我的地图中执行这些操作?
【问题讨论】:
标签: javascript node.js promise bluebird fs