首页 > 关于异步回调执行的问题

关于异步回调执行的问题

//存储所有的文件夹
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,所以...

【热门文章】
【热门文章】