Node.js 使用节点读取文件将返回读取代码之外的空对象
我正在尝试使用节点读取文件,然后使用从这些文件中提取的信息创建一个对象。我使用了fs和path libs。我在读取文件的代码外部定义了一个空对象,在该代码内部(我使用回调),定义的对象得到修改的值,但在其值外部保持为空。有人能帮我吗? 这是我的密码:Node.js 使用节点读取文件将返回读取代码之外的空对象,node.js,Node.js,我正在尝试使用节点读取文件,然后使用从这些文件中提取的信息创建一个对象。我使用了fs和path libs。我在读取文件的代码外部定义了一个空对象,在该代码内部(我使用回调),定义的对象得到修改的值,但在其值外部保持为空。有人能帮我吗? 这是我的密码: const path = require("path"); const fs = require("fs"); const dirPath = path.join(__dirname, "quer
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,
};
当我在模块.exports上运行console.log(Query)
时,我得到了{}
作为答案,但是在从fs.readdir
结束的回调之前运行相同的命令会返回正确的对象
我不确定问题是非阻塞IO还是我定义对象的方式错误。fs.readdir
是一个异步函数,这意味着脚本的其余部分将继续运行,而不等待readdir
中的回调完成
因此,对象查询
仍将打印{}
——它尚未更改
您只想在读取文件后继续程序
一种方法是使用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,
};