【发布时间】:2014-10-30 17:57:59
【问题描述】:
我想使用 node 获取包含在包含子目录的目录中的唯一文件名列表,并且在组合每个回调的结果时遇到了一些麻烦。我想避免重复操作,如果我只是从fs.stat 回调中记录文件名,就会发生这种情况。
var distinct = {};
function getNames(root) {
fs.readdir(root, function(err, list) {
list.forEach(function(file) {
file = root + '/' + file;
fs.stat(file, function(err, stat) {
if (!err && stat.isDirectory()) {
getNames(file);
} else {
distinct[path.basename(file)] = true;
}
});
});
});
}
// perform various operations on unique filename list
console.log(Object.keys(distinct));
当然,这会过早调用console.log() 函数并产生不希望的结果。我怎样才能获得一组文件名来处理;有没有使用异步方法的好方法,即不必使用readdirSync 和statSync?
【问题讨论】:
-
一个提示,使用
path.join(root, file)而不是root + '/' + file
标签: node.js asynchronous recursion accumulator