【发布时间】:2020-01-14 22:28:34
【问题描述】:
我在“./src/commands”上获得了文件列表,这些文件需要映射名为“cmds”的数组。 我想要'./src/commands/'中的文件夹,也需要文件夹中的文件来映射数组的二维数组。
我调试了许多数组和变量,但我不明白为什么会发生变化。
fs.readdir('./src/commands', function(err, fl) {
if (err) return;
for (var i = 0; i < fl.length; i++) {
if (!fl[i].endsWith('.js')) {
fs.readdir(`./src/commands/${fl[i]}`, function(err, flin) {
if (err) return;
cmds[fl[i]] = {};
for (var j = 0; j < flin.length; j++) {
cmds[fl[i]][flin[j].split(".js")[0]] = require(`./commands/${fl[i]}/${flin[j]}`);
console.log(`${fl[i]}/${flin[j]} loaded!`);
}
});
continue;
}
cmds[fl[i].split(".js")[0]] = require(`./commands/${fl[i]}`);
console.log(`${fl[i]} loaded!`);
}
});
错误信息:
internal/modules/cjs/loader.js:628
throw err;
^
Error: Cannot find module './commands/undefined/test.js'
Require stack:
- E:\git-project\VitaBot\src\main.js
[90m at Function.Module._resolveFilename (internal/modules/cjs/loader.js:625:15)[39m
[90m at Function.Module._load (internal/modules/cjs/loader.js:527:27)[39m
[90m at Module.require (internal/modules/cjs/loader.js:683:19)[39m
[90m at require (internal/modules/cjs/helpers.js:16:16)[39m
at E:\git-project\VitaBot\src\main.js:15:60
[90m at FSReqCallback.oncomplete (fs.js:153:23)[39m {
code: [32m'MODULE_NOT_FOUND'[39m,
requireStack: [ [32m'E:\\git-project\\VitaBot\\src\\main.js'[39m ]
我认为它自然需要,但事实并非如此。
【问题讨论】:
-
对于初学者,请将
var i更改为let i,这样您的i变量对于for循环的每次迭代都是唯一的,并且适用于稍后运行的异步操作。我不知道这段代码的其余部分在做什么或你在问什么,但这绝对是一个需要修复的问题。 -
@jfriend00 非常感谢。我解决了导致我痛苦的问题。我将在循环中使用 let。
标签: javascript node.js ecmascript-6 discord.js fs