node实现文件列表加载,代码执行顺序怪异

let fs =  require ('fs');
let stdin = process.stdin,
    stdout = process.stdout;
fs.readdir(process.cwd(),function (err,files) {
    console.log(files);
    console.log('');
    if (!files.length){
        return console.log('NO FILES\n');
    }else

    function file(i) {
        var filename = files[i];
        fs.stat(__dirname + '/' + filename, function (err, stat) {
            if (stat.isDirectory()) {
                console.log(i +':Dir:' + filename + '\n');
            }
            else {
                console.log(i +':File:' + filename + '\n');
            }
        });

        i++;
        console.log("!!!"+i + files.length);
        if (i === files.length){  
          read(); //列表扫描完后才进入
        }else {
            file(i); //递归加载
        }
    }
    file(0);//初始加载
})
function read() {
    
    stdout.write('ENTER THE CHOOSE\n');
    stdin.resume();
}

按照了不起的nodejs 书中的代码敲的。。。。
功能:列出当前目录的文件,在最后输出“enter the choose”

debug如下

!!!15 //第一个是i,第二个是length
!!!25
!!!35
!!!45
!!!55
ENTER THE CHOOSE
1:Dir:.idea
2:File:index.js
3:File:package.json
4:Dir:test
5:File:test.txt

enter the choose 本应该在最后输出的才对。。
ps且如果没有封装read函数 输出的列表顺序是无序的..

阅读 1.4k
1 个回答
fs.stat

是异步函数,不确定什么时候能执行完,而且只有等到同步函数执行完之后,它才开始
换成fs.statSync可以达到你要的效果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题