//存储所有的文件夹
var wenjianjia = [];
//stat检测状态
fs.readdir("./album",function(err,files){
//files是个文件名的数组,并不是文件的数组,表示./album这个文件夹中的所有东西
//包括文件、文件夹
for(var i = 0 ; i < files.length ;i++){
var thefilename = files[i];
//又要进行一次检测
fs.stat("./album/" + thefilename , function(err,stats){
//如果他是一个文件夹,那么输出它:
if(stats.isDirectory()){
wenjianjia.push(thefilename);
}
console.log(wenjianjia);
});
}
});
图片描述
这是一个判断文件夹里面的内容是不是一个文件夹,如果是就console.log出来;
这里的异步执行完i应该是数组+1的值啊,为什么还出现那么多空格和bbb文件夹;谁帮我理一下思路,伦理看得太多,移到实战就懵逼了;完全搞不懂异步回调函数的执行顺序;
最里面的的异步回调函数,里面应该是异步的啊 那么consonle.log和if语句异步执行,这样就会出现还有还没push就输出数据的情况;
你的问题是?
“这里的异步执行完i应该是数组+1的值啊,为什么还出现那么多空格和bbb文件夹”
我看了下,你有12
项内容,所以循环输出12
次,没毛病!至于循环完i
变成了数组长度+1
,和输出内容也没关系啊?你这个问题问的
至于“为什么还出现那么多空格和bbb文件夹”,这不就是异步的坑么。同步循环 + 异步输出,结果肯定控制不了啊!
异步:意味着其回调函数一定不在当前这一轮事件循环执行。
而for循环里面的语句是在当前这一轮事件循环进行的。
所以,state方法的回调函数都是在for循环结束后被调用的,此时变量thefilename(作为readdir回调函数的局部变量)的值是bbb,所以...