gpt4 book ai didi

javascript - 如何返回目录中的文件? (JavaScript、Node.js)

转载 作者:行者123 更新时间:2023-12-03 01:12:55 27 4
gpt4 key购买 nike

我想返回一个目录的文件。

我需要它将路由传递给另一个函数。

换句话说,如何使用 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;
}

最佳答案

存在多个问题。

首先,您的函数是异步的,因此它不能只返回 files 值,因为您的函数在将任何内容添加到 files 数组之前就返回了(这是它是空的)。它必须在完成时调用回调,或者返回调用者可以使用的 promise 。您必须在顶层和递归调用自己时修复该问题。

其次,您在每个递归步骤中重新定义文件,因此您无法收集所有文件。您可以传入要添加的数组,也可以在更高级别定义 files 数组,其中每个人都引用同一个数组,或者您可以调用递归连接返回的文件您当前的数组。

第三,您尚未对任何异步文件 I/O 调用实现任何错误处理。

这是我推荐的解决所有这些问题的方法:

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;
});

关于javascript - 如何返回目录中的文件? (JavaScript、Node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com