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

Discord.js报错SyntaxError: await仅可在async函数或模块顶层使用

问题现象

开发Discord.js机器人的ready事件回调逻辑时,程序抛出如下语法错误:

SyntaxError: await is only valid in async functions and the top level bodies of modules

对应出错的业务代码如下:

const client = require('../index.js');

client.on('ready', () => {
  let servers = await client.guilds.cache.size
  let servercount = await client.guilds.cache.reduce((a,b) => a+b.memberCount, 0)

  const activites = [
    `?help | ${servers} servers`,
    `Invite me now! | Watching ${servercount} members`
  ]

  setInterval(()=>{
    const status = activities[Math.floor(Math.random()*activities.length)]
    client.user.setPresence({ activities : [{name : `${status}`}]})
  }, 5000)

  
  console.log(`✅ ${client.user.tag} is ready`)
})
触发原因

代码一共存在两处问题,分别会触发语法报错和后续运行异常:

  • 核心语法错误:await关键字仅允许在async修饰的函数、或ES模块顶层作用域内使用。当前代码传给client.on('ready', ...)的是普通箭头函数,没有加async修饰,直接在内部写await会直接触发语法报错。
  • 冗余写法+隐藏拼写错误:client.guilds.cache.size是同步属性、Array.reduce()也是同步方法,二者返回值都不是Promise,根本不需要加await;另外代码里定义状态数组时写的变量名是activites,后面定时器内引用的是activities,拼写不一致,就算修好语法错误运行时也会抛出变量未定义的引用错误。
修复方案
  • 优先删除两处多余的await:当前场景下读取缓存服务器数量、统计成员数都是同步操作,不需要等待Promise结果,没必要给回调加async修饰。
  • 修正变量名拼写错误:将状态数组的变量名从错误的activites改为activities,和定时器内的引用保持一致,避免运行时引用错误。
  • 如果后续确实需要在ready回调内执行异步操作(比如拉取接口、读数据库),只要给回调函数加上async修饰即可合法使用await,写法参考:client.on('ready', async () => { /* 内部可正常写await */ })

修复后的完整可运行代码如下:

const client = require('../index.js');

client.on('ready', () => {
  let servers = client.guilds.cache.size
  let servercount = client.guilds.cache.reduce((a,b) => a+b.memberCount, 0)

  const activities = [
    `?help | ${servers} servers`,
    `Invite me now! | Watching ${servercount} members`
  ]

  setInterval(()=>{
    const status = activities[Math.floor(Math.random()*activities.length)]
    client.user.setPresence({ activities : [{name : `${status}`}]})
  }, 5000)
  
  console.log(`✅ ${client.user.tag} is ready`)
})

内容的提问来源于stack exchange,提问作者user19258256

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:36:27