javascript - JS 异步目录列表
问题描述
我试图遍历包含目录的数组,然后返回所有项目的组合数组,而不管目录的数量。我试图使用 fs.readdir 函数来读取目录,但是看到 fs.readdir 函数是一个异步函数,我无法将信息传回其中。
有没有办法使用这个功能,而且还制作一个目录列表数组?
这是我想做的,但我知道这是错误的。希望能得到一点指导。我可以提供任何其他信息。谢谢你。
var docs = [];
libs.forEach(function(lib){
fs.readdir(lib, function(err, files){
files.forEach(function(file){
docs.push(file);
});
});
});
解决方案
异步版本:
const fs = require("fs/promises");
function listDirectories(dirs) {
return Promise.all(dirs.map(dir => fs.readdir(dir))).then(files => files.flat());
}
它将字符串数组(目录)映射到由 . 返回的 promise 数组fs.readdir
,然后在使用Array.prototype.flat
. 需要展平来转换它:
[ [ "file1" ], [ "file2", "file3" ] ]
进入[ "file1", "file2", "file3" ]
.
然后,async
您可以从一个函数中调用它,如下所示:
(async () => {
const dirs = ["one", "two", "three"];
try {
let files = await listDirectories(dirs);
console.log(files);
} catch (e) {
console.error(e);
}
})();
请注意,上面是一个IIFE(立即调用函数表达式),您可以使用它来测试函数,而无需先将其集成到您的代码库中。
推荐阅读
- java - 无法从上下文中获取有效的数据源。为连接 URL 'null' 异常获取 ''
- javascript - Highcharts 注释位置/顶部在初始渲染时不正确
- html - 如何仅在按钮之间添加填充?
- jpa - 使用 Hibernate OGM,为什么字符串序列生成器为每次插入创建 2 个元素?
- java - 验证 HashMap 访问的可能性
- java - 使用 primefaces 的数据表不过滤
- javascript - 使用 Javascript 显示图像数组
- c# - 使用正则表达式在svg文件中查找用'('和')'字符替换文本
- python - 如何在 Python 中设置 Delaunay 三角形边的最大距离
- r - R 3.1.0 中的行名(用于 azure 机器学习工作室)