특정 키와 값이있는 디렉토리의 모든 파일을 반환하는 일부 코드가 있습니다. 내가 원하는 키 중 하나는 부울 값을 가진 디렉토리입니다.노드 확정 된 값을 가진 약속 반환 객체
아래의 코드는 정상적으로 작동하지만 Promise.all을 제거하고 약속을 반복하는 대신 내지도의 파일 객체에 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 부분을 제거 할 수 있습니까? 대신 내지도에서 이러한 작업을 수행 하시겠습니까? 모든 파일이 끝날 때까지 대기 할 때문에
const fileNames = await fs.readdirAsync(desktopPath);
const files = await Promise.map(fileNames, fileName => Promise.props({
path: `${desktopPath}/${fileName}`,
name: fileName,
ext: fileName.split('.').pop(),
isDirectory: fs.statAsync(`${desktopPath}/${fileName}`);
})));
console.log(files);
return files;