变量:
// 博客路径是js的相对的父级的父级
var articleRoad = path.resolve(__dirname, '../../Blogs')
// 将文档收入于articlelist
var articleList = [];
var isMd = RegExp(/.md/);//需要.md文件
var ignore = RegExp(/.git/);//忽略.git文件
递归函数:
// 获得博客类型的文章,上一级路径,文件名,类型
function getFileList(oldLoad, fileName, type) {
var fileroad = path.join(oldLoad, fileName);// 博客类别路径
var stat = fs.lstatSync(fileroad);// 判断是否为文件
if (stat.isDirectory()) {// 判断是否为文件
// console.log(fileroad, '遍历这个文件夹')
fileOperation.getFileChildrenName(fileroad)
.then((data) => {
data.forEach(element => {
//先获取最外层的.md文件
if (isMd.test(element)) {
var stats = fs.statSync(`${fileroad}/${element}`)// 获得文件最新修改时间
var title = element.split('.');
element = title[0];
var info = [element, stats.mtime, type]
articleList.push(info);
} else {
if (!ignore.test(element)) {
getFileList(fileroad, element, element);
}
}
})
})
}
}
function readArticleList() {
console.log(articleList, "???")
getFileList(articleRoad, '', 'public');
console.log(articleList, "???")
}
readArticleList();
我想能等递归全部结束以后打印articleList。
注意:我这个文件数量是动态的,以后我还会再添加
我想确定递归函数执行结束以后,使用最终的值,我要怎么解决?
十分感谢各位,我自己已经解决了这个问题。有需要的人,可以使用我这个方法。
思路就是把递归换成队列的方式。
例如: var arr = [[1, 2, 3],[[[[[[11]]]]]], [4, [5]], [6, [7, 8, 9,[10]]]]; 得到 brr: [1, 2, 3, 4, 6,5, 7, 8, 9, 10,11]
把数组当成是一个文件夹,这样去不断遍历。
文字太多了,我把它写成博客了。有这个问题的朋友,可以参考;https://blog.csdn.net/lemisi/article/details/102551610
我原来的问题就是:
递归的方法不知道什么时候递归会结束;收集好我想要的文件放入列表中,用来执行下一行代码;
使用队列就可以知道什么时候结束了;收集好我想要的文件放入列表中,结束以后就可以用来执行下一行代码了。
最终的值 是什么?
如果“最终的值”定义为所有过滤出的 md 文件,那么用这个轮子试试 https://www.npmjs.com/package/rxwalker pipe() 最后用 reduce 操作符搜集所有输出值。
不大确定我这个是否能帮到你,但功能类似
globby
@waitingsong 最终的值就是我收集的所有md文件信息;
@Chenyating 我上面说的那个包可以遍历目录,文件和链接,然后逐个发射出来。你可以用 rxjs 的 reduce 操作符搜集所有的值然后一次性发射。
如果需要的是 Promise<file[]>
的返回类型,那么结果转换下 files$.toPromsie()
就行了。
另外,一楼图片中路径的径
写错了。五笔?
删除目录以及全部文件
那么复杂干嘛
await globby('**/*.md')
@atian25 哈哈,主要是想自己写。