新手求教,使用fs.stat判断fs.readdir读出的数组中是否含有目录时得到的结果与期望有异
先贴出让我困惑的结果:
代码:
var fs = require('fs')
fs.readdir('node_modules',function(err,files){
if(err){
console.log(err)
}else{
//console.log(files)
let filesArr=[];
for(var i=0;i<files.length;i++){
(function(i){
fs.stat('node_modules/'+files[i],(e,stats)=>{
// console.log('files['+i+'] : '+files[i])
if(stats.isDirectory()){
filesArr.push(files[i])
if(i === files.length-1){
console.log('目录:-----'+filesArr)
}
}
console.log('files['+i+'] : '+files[i])
})
})(i)
}
}
})
上述示例中有时得到的filesArr
仅有nav
目录,有时候得到的结果是nav
和bar
目录都有,为什么呢?我以为异步函数是按照顺序依次加入到队列中的,然后依次执行,不是这样的吗?
3 回复
异步的话,就是不确定性的,回调里面的代码不确定什么时候会执行,应该等到所有回调都执行完,再打印filesArr里面的值,就没问题了。
@weiketa 在上面那个例子中,应该如何监测所有的回调都执行完了呢?
promise.all 或者 async/await 或者 eventproxy @innerWang