app.js
const fs = require("fs");
let dirArray = []; // 这个的作用是存储结果
let flieArray = []; // 这个东西的作用是存储文件
let arrObj = {};
arrObj.dirArr = dirArray;
arrObj.fileArr = flieArray;
let number = 0; // number的作用是找到迭代结束的位置
/**
*
* @param {*} dir 路径
* 迭代的函数本身, 它会调用foreach函数
*/
function readDirIter2(dir) {
// 开始的时候加一
number++;
foreach(dir);
}
/**
* 这个异步的作用是获取到结果
*/
async function getArray() {
return new Promise((resolve, reject) => {
let timer1 = setInterval(function () {
if (number == 0) {
resolve(arrObj);
clearInterval(timer1);
}
}, 1);
});
}
/**
*
* @param {*} dir 读取文件夹的路径
* 这个文件的作用是读取路径
*/
async function readDir(dir) {
return new Promise((resolve, reject) => {
fs.readdir(dir + "/", (err, data) => {
if (err) {
console.log("路径错误");
console.error(err);
return;
}
resolve(data);
});
});
}
/**
*
* @param {} dir
* 这个的作用是遍历路径值, 看路径是文件还是文件夹
* 如果是文件夹则又调用路径读取迭代
*/
async function foreach(dir) {
let data = await readDir(dir);
if (data.length == 0) {
// 如果数组长度为0 number减一
--number;
}
data.forEach((el, index, arr) => {
fs.stat(dir + "/" + el, (err, data) => {
if (err) {
// 这里代变整个代码错了
console.log("路径错误");
console.error(err);
return;
}
if (!data.isFile()) {
dirArray.push(dir + "/" + el);
readDirIter2(dir + "/" + el);
}
if (data.isFile()) {
flieArray.push(dir + "/" + el);
}
// 如果是文件且是最后一个number减一
if (arr.length == index + 1) {
--number;
}
});
});
}
/**
*
* @param {*} dir 要查找的路径
* 入口函数
*/
async function main(dir) {
readDirIter2(dir);
let obj = await getArray();
return obj;
}
exports.main = main;