这个问题在这里已有答案:
所以我正在为应用程序构建一个命令处理程序,我想从具有正确模块的文件构建一个字典。字典正在fs.readdir中正确设置,但事情发生在我身上的故障,我无法弄清楚它是一个上下文还是我没有看到的同步问题。
const dict = new Map();
fs.readdir(filePath, (err, files) => {
if (err) console.log(err);
console.log(files);
let jsfile = files.filter(f => f.split(".").pop() === "js");
if (jsfile.length <= 0) {
console.log("didn't see any commands.");
return;
}
jsfile.forEach((f) => {
console.log(f);
let props = require(`${filePath}/${f}`);
try {
if(props.help.name)
dict.set(props.help.name, props);
console.log(`${f} was loaded.`);
}
catch (e) {
}
});
let run = dict.get('kata1');
run.run();
console.log(dict);
});
console.log(dict + "2");
出于某种原因,console.log(dict +“2”);先填充,然后运行fs.readdir中的其余日志。我已经尝试将读取放在函数中并首先调用该函数,但我似乎无法访问fs.readdir之外的dict。
就像你提到它是一个同步问题fs.readdir
是异步函数。
回调(err, files) =>
将调用eventloop中的所有同步函数,
这个 - > console.log(dict + "2");
是一个同步功能。
读这个: