You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:55:27