node批量读取文件时异步变同步的方法分享

本文探讨了在Node.js中如何将批量读取文件的异步操作转换为同步操作。通过递归和闭包两种方式解决异步导致的问题,详细解释了递归读取文件的实现过程和闭包隔离变量的作用,提供了两种实现同步读取文件夹的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求,读取一个文件夹下面的文件,并且获取其中的文件夹名字:

编码:

var fs=require('fs');

var dir=[];//定义一个数组,存放文件夹的名字

fs.readdir('./',function(err,files){ //读取根目录下的所有文件,files为所有文件名字的集合

for(var i=0;i<files.length;i++){//遍历文件名

 var theFilename=files[i];//存放遍历时某个文件的名字

 fs.stat('./'+theFilename,function(err,stats){//读取具体的某个文件内容

  if(stats.isDirectory()){//判断是不是文件夹

    dir.push(theFilename);

  }

 });

console.log(dir);

}

});


//上面这个代码有个问题,无论如何检测结果都是files集合最后一个文件的集合,为什么呢?因为异步。

当node遇到这个代码时: fs.stat('./'+theFilename,function(err,stats){//读取具体的某个文件内容  

它直接又去执行第二次循环了,并没有等读取完成再循环,所以等读取完成执行回调函数时, var theFilename=files[i];//存放遍历时某个文件的名字已经是读取到最后一个文件了

怎么解决这个问题呢?

有两个思路:

1.把异步变成同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值