fs.readdir的范围或上下文问题

时间:2019-02-17 15:43:39

标签: javascript node.js

因此,我正在为应用程序构建命令处理程序,并且希望从具有正确模块的文件中构建字典。字典已在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。

1 个答案:

答案 0 :(得分:0)

就像您提到的那样,这是一个同步问题fs.readdir是异步函数。

回调(err, files) =>将在事件循环中的所有同步功能之后调用

此-> console.log(dict + "2");是一个同步功能。

阅读: