Discord.js开发转录按钮时报msgs.forEach is not a function错误如何解决
错误原因
TypeError: msgs.forEach is not a function 报错的核心是 msgs 变量不是数组,不存在forEach方法。
你当前使用的discord.js版本≥v13时,官方已经完全移除了Collection类的.array()内置方法,你调用该不存在的方法会返回undefined,赋值给msgs后自然无法调用数组原型上的forEach方法。
修复步骤
- 替换数组转换代码
将你代码中的如下行:
let msgs = messageCollection.array().reverse();
替换为以下任意一种合法的Collection转数组写法:
- 扩展运算符写法:
let msgs = [...messageCollection.values()].reverse();
- Array.from写法:
let msgs = Array.from(messageCollection.values()).reverse();
- 其他潜在问题修复(可选但建议)
- 你当前的消息拉取操作只做了错误打印没有兜底逻辑,如果拉取失败返回
undefined,后续调用channelMessages.size会直接抛出新错误,建议在catch分支增加中断逻辑。 forEach不支持异步等待,你在forEach回调中使用async/await不会等待文件写入完成,可能导致后续发送文件时文件未写完读取失败,建议将forEach改为普通for...of循环:
for (const msg of msgs) { // 原forEach内的逻辑直接迁移到此处即可 }
- 如果你是在原生Node.js环境运行该代码,要确认已经引入
jsdom等DOM模拟库初始化了document对象,否则后续DOM操作相关代码会直接报错。
内容的提问来源于stack exchange,提问作者Otávio Quirino
相关产品推荐
相关产品推荐

