fs.readdir的范围或上下文问题[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

所以我正在为应用程序构建一个命令处理程序,我想从具有正确模块的文件构建一个字典。字典正在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。

javascript node.js
1个回答
0
投票

就像你提到它是一个同步问题fs.readdir是异步函数。

回调(err, files) =>将调用eventloop中的所有同步函数,

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

读这个:

© www.soinside.com 2019 - 2024. All rights reserved.