javascript - 关于异步回调执行的问题
PHP中文网
PHP中文网 2017-04-11 10:44:00
[JavaScript讨论组]
//存储所有的文件夹
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就输出数据的情况;

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
PHPz

你的问题是?

“这里的异步执行完i应该是数组+1的值啊,为什么还出现那么多空格和bbb文件夹”

我看了下,你有12项内容,所以循环输出12次,没毛病!至于循环完i变成了数组长度+1,和输出内容也没关系啊?你这个问题问的

至于“为什么还出现那么多空格和bbb文件夹”,这不就是异步的坑么。同步循环 + 异步输出,结果肯定控制不了啊!

黄舟

异步:意味着其回调函数一定不在当前这一轮事件循环执行。

而for循环里面的语句是在当前这一轮事件循环进行的。

所以,state方法的回调函数都是在for循环结束后被调用的,此时变量thefilename(作为readdir回调函数的局部变量)的值是bbb,所以...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号