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

如何让JS机器人等待指定时长后再继续执行后续代码?

解决方案

你遇到的两个报错均为用法错误导致,按以下步骤修改即可实现需求:

步骤1:封装可等待的延迟函数

原生setTimeout不返回Promise,无法直接用await调用,需要先封装成Promise版本的延迟工具:

// 放在代码顶层位置即可
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));

步骤2:给事件回调添加async标识

await关键字只能在标记为async的函数中使用,你需要把messageCreate的回调函数改为async函数,修改后完整代码如下:

client.on('messageCreate', async message => { 
  await message.channel.send('1st message')
  await wait(5000)
  await message.channel.send('2nd message')
  await wait(5000) 
  await message.channel.send('3rd message')
})

报错原因说明

  • SyntaxError: await is only valid in async functions:你没有给回调函数加async关键字,当前作用域不支持await语法
  • TypeError [ERR_INVALID_CALLBACK]:你直接调用setTimeout(5000)的写法错误,setTimeout第一个参数要求是回调函数,不能直接传时间数值

如果不偏好async/await写法,也可以用链式Promise实现相同效果:

client.on('messageCreate', message => { 
  message.channel.send('1st message')
    .then(() => wait(5000))
    .then(() => message.channel.send('2nd message'))
    .then(() => wait(5000))
    .then(() => message.channel.send('3rd message'))
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:06:06