获取包含字符串的文件夹中的所有文件,将文件名推入数组,然后使用节点FS返回数组
如标题所描述的那样,我想从特定目录中读取所有文件,然后返回所有内容中具有特定字符串的所有文件的名称。
这是我的代码到目前为止的外观:
const dirname = path.resolve("./results/");
async function readFiles(dirname) {
const allResults = []
fs.readdir(dirname, function(err, filenames) {
if (err) {
console.log(err);
return;
}
filenames.forEach(async function(filename) {
fs.readFile(dirname + "/" + filename, 'utf-8', function(err, content) {
if (err) {
console.log(err);
return;
}
if (content.includes('content string')) {
allResults.push(filename);
}
});
});
});
return allResults;
}
readFiles(dirname).then((res) => {
console.log(res);
})
我得到的结果是 []
,
因此我了解这是承诺和异步功能的问题,但是,这还不是我完全掌握的概念,尽管尝试了多种可能性组合( new Promise()
,或。没有成功。
我缺少什么,以便它返回 allResults
仅在读取所有文件后数组?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该放弃回调语法并使用 fs.promises api。这看起来更干净
You should ditch callback syntax and use fs.promises Api. This looks much cleaner