Javascript 在异步JS中暂停执行的最佳方法
我正在Node.JS中构建一个聊天机器人,希望能够以一种简单的方式在消息之间插入几秒钟的延迟 我已经提出了3种不同的方法,所有这些方法都有效,但没有一种是正确的,我希望了解实现延迟的最佳方法是什么,以及选择和构建的最佳方法是什么Javascript 在异步JS中暂停执行的最佳方法,javascript,asynchronous,Javascript,Asynchronous,我正在Node.JS中构建一个聊天机器人,希望能够以一种简单的方式在消息之间插入几秒钟的延迟 我已经提出了3种不同的方法,所有这些方法都有效,但没有一种是正确的,我希望了解实现延迟的最佳方法是什么,以及选择和构建的最佳方法是什么 使用async delay()函数暂停。它工作得很好,但它似乎是一种奇怪的方法,更像是一种黑客行为,而不是一种预期的功能 嵌套的setTimeout()函数。这一个在几次延迟后将代码弄得一团糟 具有附加超时的多个设置超时。计算超时可能会成为一件麻烦事,尤其是在插入或删除
我倾向于最后一个,然后使用递增变量来表示总时间。第一种感觉最干净,最容易实现。我不知道这是否是你想要的答案。 但这个软件包可能有用。
你为什么认为第一种方法似乎是一种黑客行为?不太确定,我一直被教导代码属于setTimeout,我很喜欢这种方法,只是想知道它是否有任何缺点如果你只关注单线程环境,我认为第一种方法是三种方法中最干净的。关于第一种方法的更多细节。是的,这就是我想要的,但它看起来像是第一种方法的一个过于复杂的版本。我真的在考虑选择那一个。如果你只想延迟你的消息,那么在软件包中就不需要其他功能了。我想你可以使用第一种方法。它是最干净和最容易使用的。该软件包仅在您想要清除延迟时有用,例如“嘿,用户,请在3分钟内键入您的密码”。如果他输入,您可以使用
delay.signal
取消延迟并调用所需的函数。
const delay = async time => {
await new Promise(r => setTimeout(() => r(), time))
}
console.log('Message 1');
await delay(1000)
console.log('Message 2');
setTimeout(() => {
console.log('Message 1');
setTimeout(() => {
console.log('Message 2');
// etc...
}, 1000)
}, 1000)
setTimeout(() => void console.log('Message 1'), 1000)
setTimeout(() => void console.log('Message 2'), 1000 + 1000)