需求,读取一个文件夹下面的文件,并且获取其中的文件夹名字:
编码:
var fs=require('fs');
var dir=[];//定义一个数组,存放文件夹的名字
fs.readdir('./',function(err,files){ //读取根目录下的所有文件,files为所有文件名字的集合
for(var i=0;i<files.length;i++){//遍历文件名
var theFilename=files[i];//存放遍历时某个文件的名字
fs.stat('./'+theFilename,function(err,stats){//读取具体的某个文件内容
if(stats.isDirectory()){//判断是不是文件夹
dir.push(theFilename);
}
});
console.log(dir);
}
});
//上面这个代码有个问题,无论如何检测结果都是files集合最后一个文件的集合,为什么呢?因为异步。
当node遇到这个代码时: fs.stat('./'+theFilename,function(err,stats){//读取具体的某个文件内容
它直接又去执行第二次循环了,并没有等读取完成再循环,所以等读取完成执行回调函数时, var theFilename=files[i];//存放遍历时某个文件的名字已经是读取到最后一个文件了
怎么解决这个问题呢?
有两个思路:
1.把异步变成同步