我想返回目录的文件。
我需要它来将路由传递给另一个功能。
换句话说,如何使用JavaScript / Node.js返回目录的文件?
const fs = require('fs');
const path = require('path');
const mdLinks = require('../index');
exports.extension = (route) => {
return new Promise((resolve, reject) => {
try {
recursive(route);
} catch (e) {
reject(e);
}
});
}
const recursive = (route) => {
const extMd = ".md";
let extName = path.extname(route);
let files = [];
fs.stat(route, (err, stats) => {
if (stats && stats.isDirectory()) {
fs.readdir(route, (err, files) => {
files.forEach(file => {
let reFile = path.join(route, file);
if (file !== '.git') {
recursive(reFile);
}
});
})
}
else if (stats.isFile() && (extMd == extName)) {
files.push(route);
}
})
return files;
}
答案 0 :(得分:1)
有多个问题。
首先,您的函数是异步的,因此它不能仅返回Compose Reply
值,因为您的函数在将任何内容添加到files
数组之前很久就返回了(这是它为空的一个原因)。它必须在完成后调用回调或返回调用方可以使用的承诺。您必须在顶层和递归调用时都进行修复。
第二,您要在每个递归步骤中重新定义files
,以便无法收集所有内容。您可以传递要添加的数组,也可以在更高级别定义files
数组,每个人都引用同一个数组,也可以调用递归方式连接返回到当前数组的文件
第三,您尚未在任何异步文件I / O调用上实现任何错误处理。
这是我建议的解决所有这些问题的方法:
files