因此,我正在为应用程序构建命令处理程序,并且希望从具有正确模块的文件中构建字典。字典已在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中的其余日志。我尝试将read放入一个函数中,然后先调用该函数,但是我似乎无法在fs.readdir之外访问dict。
答案 0 :(得分:0)
就像您提到的那样,这是一个同步问题fs.readdir
是异步函数。
回调(err, files) =>
将在事件循环中的所有同步功能之后调用
此-> console.log(dict + "2");
是一个同步功能。
阅读: