我写了一个循环,我想每秒运行一次,直到当前时间等于循环外指定的时间。如果时间匹配,它将记录“是时间”,并跳出循环;否则,它将在一秒钟内再次运行。
我使用node来运行文件,文件在执行时挂起,所以我必须使用CTRL+C输出,但它不会打印任何内容。
这显然是我这边的一个bug,但我不知道为什么会发生。
while (true) { async ()=>{
const now = new Date();
const nowHour = now.getHours();
const nowMinute = now.getMinutes();
if (nowHour === hTarget && nowMinute === mTarget) {
console.log('it is time!');
return; // exit the loop when the target time is reached
}
console.log('not yet');
// Wait for 1 second before checking again
// to avoid excessive CPU usage
await new Promise((resolve) => setTimeout(resolve, 1000));
}
}
我试过不用异步函数运行它,但我只是遇到了stackoverlow错误。
2条答案
按热度按时间8yparm6h1#
匿名函数内部的循环
把你的函数保存在一个变量中,这样你就可以把它叫做
let func = async() => {
调用函数
func();
llew8vvj2#
也许你只是在玩承诺,但对我来说,使用普通的超时似乎更简单。如果你出于某种原因需要轮询,设置超时接近所需的时间,然后当接近时(比如5或10秒),只需设置它为剩余的延迟。
设置它在95%的剩余时间过去后运行可以避免过度轮询,也意味着计时器会在接近所需时间时更新,希望这样可以避免因等待时间过长而产生的错误。