猿问

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函数 输出的列表顺序是无序的..


慕妹3146593
浏览 432回答 1
1回答

慕哥9229398

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

相关分类

JavaScript
我要回答