我写了一个函数,它遍历目录并分析文件,但我不知道如何检测整个过程已经完成(它分析了所有目录和子目录中的所有文件)所以我可以做结果就是这样。
我使用了递归,但我还在学习它,我知道它不是很正确,所以我想寻求帮助。
const path = require('path');
const fs = require('fs');
const _ = require('lodash');
let result = {};
const goThroughDirs = parentPath => {
const stat = fs.statSync(parentPath);
if (stat.isDirectory()) {
_.each(fs.readdirSync(parentPath), child => goThroughDirs(path.join(parentPath, child)));
} else {
analyseFile(parentPath)
.then(response => {
result = _.merge({}, result, response);
});
}
};
goThroughDirs(path.join(__dirname, 'rootDir'));
提前感谢您的帮助。
答案 0 :(得分:1)
鉴于你已经在使用promises,它就像
一样简单function goThroughDirs(parentPath) {
const stat = fs.statSync(parentPath);
if (stat.isDirectory()) {
return Promise.all(_.map(fs.readdirSync(parentPath), child =>
// ^^^^^^ ^^^^^^^^^^^ ^^^
goThroughDirs(path.join(parentPath, child))
)).then(responses =>
_.merge({}, ...responses);
);
} else {
return analyseFile(parentPath);
// ^^^^^^
}
}
goThroughDirs(path.join(__dirname, 'rootDir')).then(result => {
// it's done
console.log(results);
});