如何让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
相关产品推荐
相关产品推荐

