当前位置: 首页 > 后端技术 > Node.js

TypeScriptES6-Promise递归遍历文件夹下的文件

时间:2023-04-03 23:29:52 Node.js

貌似很多人喜欢以此作为写文章的初体验,加油吧。遍历文件夹下的所有文件,步骤如下:1.传入一个路径,读取该路径下的所有文件;2、遍历读取的文件,判断当前文件是文件还是文件夹;3.如果:上一个目录是文件,输出当前文件的绝对路径,返回;4、else:当前目录为文件夹,获取文件夹的路径,继续递归遍历文件夹中的文件;5、直到遍历目录下的所有文件。常规实现代码:import*asfsfrom'fs';从“路径”导入*作为路径;//导入fs库和path库,它们是从哪里来的?了解npm,yarn/***@description*path.resolve(...pathSegments:string[]):string*@param参数为字符串,返回绝对路径*如path.resolve(`${__dirname}`,'../../assets')*__dirname是nodejs下的全局变量,可以获取当前文件所在目录的完整目录名*相当于cd../../assetsfrom当前文件的目录/,获取assets目录的绝对路径*/constdirPath=path.resolve(`${__dirname}`,'../../assets/');fileDisplay(dirPath);/***文件遍历方法*@paramfilePath需要遍历的文件路径*/functionfileDisplay(filePath:string){//根据文件路径读取文件,返回一个文件列表fs.readdir(filePath,(err,files)=>{if(err){console.warn(err);return;}//遍历读取文件列表files.forEach(filename=>{//path.join得到当前的绝对路径fileconstfilepath=path.join(filePath,filename);//根据文件路径获取文件信息fs.stat(filepath,(error,stats)=>{if(error){console.warn('获取失败文件统计');返回;}constisFile=stats.isFile();//无论对于文件constisDir=stats.isDirectory();//是否为文件夹if(isFile){console.log(filepath);//如果是文件,输出它的路径~}if(isDir){fileDisplay(filepath);//递归,如果是文件夹,则继续遍历文件夹中的文件;}});});});}ES6-Promise实现如果你了解ES6Promise,你可以拒绝这个回调地狱是的,因为嵌套大量缩进的回调会有很多缺点:难以复用,借助外部变量......然后我们可以进阶,终极进化://读取文件的逻辑拉出函数fsReadDir(dir:string){returnnewPromise((resolve,reject)=>{fs.readdir(dir,(err,files)=>{if(err)reject(err);resolve(files);});});}//获取fs.stats的逻辑拉取函数fsStat(path:string){returnnewPromise((resolve,reject)=>{fs.stat(path,(err,stat)=>{if(err)reject(err);resolve(stat);});});}//搜索文件main方法asyncfunctionfileSearch(dirPath:string){constfiles=awaitfsReadDir(dirPath);const承诺=文件。地图(文件=>{返回fsStat(路径。加入(dirPath,文件));});常量数据=等待Promise.all(promises).then(stats=>{for(leti=0;i{constisFile=stat.isFile();constisDir=stat.isDirectory();if(isDir){fileSearch(datas.files[datas.stats.indexOf(stat)]);}if(isFile)console.log(datas.files[datas.stats.indexOf(stat)]);});}以上是Promise的简单实现,方便新手阅读理解Promise的优点.Promise更深入的实现可以参考阮一峰老师的ECMAScript6入门百科,那么本文就先结束了,但这并不是程序的全部过程。互相鼓励,路漫漫其修远兮。