新手求教,使用fs.stat判断fs.readdir读出的数组中是否含有目录时得到的结果与期望有异
发布于 6 年前 作者 innerWang 2801 次浏览 来自 问答

先贴出让我困惑的结果: 图片

代码:

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目录,有时候得到的结果是navbar目录都有,为什么呢?我以为异步函数是按照顺序依次加入到队列中的,然后依次执行,不是这样的吗?

3 回复

异步的话,就是不确定性的,回调里面的代码不确定什么时候会执行,应该等到所有回调都执行完,再打印filesArr里面的值,就没问题了。

@weiketa 在上面那个例子中,应该如何监测所有的回调都执行完了呢?

promise.all 或者 async/await 或者 eventproxy @innerWang

回到顶部