DiscordJS v14报错:ReferenceError: 无法在初始化前访问'_cmds'
解决DiscordJS v14中可点击斜杠命令的ReferenceError问题
错误原因
你的代码存在几个核心问题:
- 箭头函数语法错误:
map回调使用大括号但未显式返回值,导致逻辑执行顺序混乱 find匹配条件错误:client.application.commands.cache.find((x) => x.name)仅返回第一个带name属性的命令,无法匹配当前筛选的目标命令- 变量作用域与初始化问题:
_cmds的声明位置导致在引用时未完成初始化 - 变量未规范声明:
_cmd未用let/const声明,会造成全局变量污染
修复后的代码
// 先筛选出Info分类的自定义命令 const infoCommands = client.slashCommands.filter(x => x.category === "Info"); // 遍历匹配应用缓存中的命令,生成可点击格式字符串 const cmdList = infoCommands.map(cmd => { // 根据命令名称精准匹配缓存中的应用命令 const appCmd = client.application.commands.cache.find(appCmd => appCmd.name === cmd.name); // 增加空值判断,避免找不到命令时抛出错误 if (!appCmd) return `*${cmd.name} - 命令未在应用缓存中找到*`; return `</${appCmd.name}:${appCmd.id}> ╰ ${appCmd.description}`; }).join("\n"); await msg.edit({ embeds: [ new EmbedBuilder() .setColor(ee.color) .setDescription(`**Info Commands!** *some of the commands are not be visible yet to public.* ${cmdList}`) ] });
关键修复说明
- 拆分逻辑:先完成分类筛选,再单独处理每个命令的缓存匹配,代码可读性更高
- 精准匹配:修正
find条件,确保获取到当前命令对应的应用缓存实例 - 容错处理:增加空值判断,避免因命令未同步到缓存导致的额外报错
- 规范变量:用
const声明变量,避免全局作用域污染 - 显式返回:
map回调中明确返回生成的字符串,保证数组构建正确
内容的提问来源于stack exchange,提问作者SadSenpai
相关产品推荐
相关产品推荐

