【发布时间】:2014-05-21 23:08:42
【问题描述】:
我想做这样的事情
function scan(apath){
var files = fs.readdirSync(apath);
for(var i=0; i<files.length;i++){
var stats = fs.statSync(path.join(apath,files[i]))
if(stats.isDirectory()){
results.push(path.join(apath, files[i]))
scan(path.join(apath,files[i]))
}
if(stats.isFile()){
results.push(path.join(apath,files[i]))
}
}
}
但异步。
尝试使用异步函数让我陷入了这样的噩梦。
function scan(apath){
fs.readdir(apath, function(err, files)){
var counter = files.length;
files.forEach(function(file){
var newpath = path.join(apath, file)
fs.stat(newpath, function(err, stat){
if(err) return callback(err)
if(stat.isFile())
results.push(newpath)
if(stat.isDirectory()){
results.push(newpath)
scan(newpath)
}
if(--counter <=0) return
})
})
}
}
所有的地狱都在节点的堆栈中松动,因为事情不会像在同步方法中那样以逻辑顺序发生。
【问题讨论】:
标签: node.js recursion path directory fs