Есть несколько проблем.
Во-первых, ваша функция асинхронна, поэтому она не может просто вернуть значение files
, потому что ваша функция возвращается задолго до того, как что-либо добавлено в массив files
(это одна из причин того, что она пуста). Когда это будет сделано, ему придется либо вызвать обратный вызов, либо вернуть обещание, которое может использовать вызывающий. Вам придется исправить это как на верхнем уровне, так и при рекурсивном вызове себя.
Во-вторых, вы переопределяете files
на каждом рекурсивном шаге, поэтому у вас нет возможности собрать их все. Вы можете либо передать массив для добавления, либо вы можете определить массив files
на более высоком уровне, где все ссылаются на один и тот же объект, или вы можете вызвать рекурсивный конкатат файлов, которые возвращаются в ваш текущий массив.
В-третьих, вы не реализовали обработку ошибок ни в одном из ваших асинхронных файловых вызовов ввода / вывода.
Вот мой рекомендуемый способ решения всех этих проблем:
exports.extension = (route) => {
return recursive(route);
}
const util = require('util');
const stat = util.promisify(fs.stat);
const readdir = util.promisify(fs.readdir);
// returns a promise that resolves to an array of files
async function recursive(route) {
const extMd = ".md";
let extName = path.extname(route);
let files = [];
let stats = await stat(route);
if (stats.isDirectory()) {
let dirList = await readdir(route);
for (const file of dirList) {
if (file !== '.git') {
let reFile = path.join(route, file);
let newFiles = await recursive(reFile);
// add files onto the end of our list
files.push(...newFiles);
}
}
} else if (stats.isFile() && extMd === extName) {
files.push(route);
}
// make the files array be the resolved value
return files;
});