在继续代码之前让机器人等待一段时间

Posted

技术标签:

【中文标题】在继续代码之前让机器人等待一段时间【英文标题】:Make a bot wait for some time before continuing the code 【发布时间】:2021-12-03 06:57:05 【问题描述】:

有没有办法让机器人在继续代码之前等待一段时间(例如 5 秒)?我需要类似的东西:

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

我尝试使用setInterval,就像许多人建议的那样,但这似乎不是我的解决方案。 我也不能使用await setTimeout(time) 因为SyntaxError: await is only valid in async functions and the top level bodies of modulesTypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received 5000

【问题讨论】:

这能回答你的问题吗? What is the javascript version of sleep()? setInterval 将以某种方式参与任何答案,如果您分享您的用法,也许我们可以找出问题所在。 @SvenEberth 如果我理解你建议的正确答案,它对我不起作用,即使我有最新的 node.js 版本! (TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received 5000) @DanOswalt 基本上我需要发送一些消息,它们之间有一些短暂的延迟 function doThing() console.log('hi') setInterval(doThing, 5000);这不起作用? 【参考方案1】:

您可以使用 Node 的 Util 库 promisify setTimeout。然后使messageCreate 回调异步。

const wait = require('util').promisify(setTimeout);

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

【讨论】:

以上是关于在继续代码之前让机器人等待一段时间的主要内容,如果未能解决你的问题,请参考以下文章

告诉 Ruby 程序等待一段时间

(Discord.py)如何让机器人在一段时间后删除自己的消息?

puppeteer:在继续下一行之前等待 N 秒

如何在继续之前等待所有 multiprocessing.Processes 完成?

如何让机器人在一段时间后删除消息

如何让 TextWatcher 在执行某些操作之前等待一段时间