使用 Node 读取文件将返回读取代码之外的空对象



我正在尝试使用 Node 读取文件,然后使用我从这些文件中提取的信息创建一个对象。我使用了 fs 和路径库。我在读取文件的代码外部定义了一个空对象,在该代码中(我使用回调的地方(,定义的对象修改了它的值,但在它的值之外的值仍然是空的。有人可以帮助我吗? 这是我的代码:

const path = require("path");
const fs = require("fs");
const dirPath = path.join(__dirname, "query");
let Query = {};
fs.readdir(dirPath, (error, files) => {
if (error) {
return console.log(error);
}
files.forEach((file) => {
const loaded = require(path.join(dirPath, file));
Object.entries(loaded).forEach(([key, value]) => {
Query[key] = value;
});
});
});
module.exports = {
Query,
};

当我在module.exports上方运行console.log(Query)时,我得到了{}答案,但是在从fs.readdir端返回的回调之前运行相同的内容会返回正确的对象。

我不确定问题是非阻塞IO还是我以错误的方式定义了对象。

fs.readdir

是一个异步函数,这意味着脚本的其余部分将继续运行,而无需等待readdir中的回调完成。

因此,对象Query仍将打印{}- 它尚未更改。

您希望仅在读取文件后继续程序。

执行此操作的一种方法是使用readdirSync而不是同步函数readdir。然后,只有完成,程序才会继续。

您使用readdirSync的代码:

const path = require("path");
const fs = require("fs");
const dirPath = path.join(__dirname, "query");
let Query = {};
fs.readdirSync(dirPath).forEach((file) => {
const loaded = require(path.join(dirPath, file));
Object.entries(loaded).forEach(([key, value]) => {
Query[key] = value;
});
console.log(Query); // Should return the desired object
module.exports = {
Query,
};

相关内容

  • 没有找到相关文章