0
fs.readdir(path, function (err, data) {
        if (err) {
            console.log(err);
            return
        }
        for(var i=0;i<data.length;i++){
            fs.stat(`${path}/${data[i]}`, (err, stat) => {
                console.log(`${path}/${data[i]}`);
                if (err) {
                    return false;
                }
                if (stat.isDirectory()) {
                    findDir(`${path}/${data[i]}`);
                }
            })
        }
 })       

遍历一个目录下的子目录,应为fs.stat 是异步,所以打印的都是undefined ,但是把循环换成foreach就可以为什么?

supreme 2.3k
2019-06-14 提问
1 个回答
0

es5下没有块级作用域概念导致的老生常谈问题了

for (var i = 0; i < 10; i++) {
  setTimeout(() => {
    console.log(i);
  });
}

你执行这段代码观察下异步回调之后,回调函数读取的i的值会是你期望的值吗?

在支持es6node环境下var i=0 改成 let i = 0 绑定块级作用域即可

for (let i = 0; i < 10; i++) {
  setTimeout(() => {
    console.log(i);
  });
}

撰写答案

推广链接