我创建了一个无限循环来检查是否满足某个时间,并相应地更改我的接口。
function infiniteloop(){
let now = moment();
start = moment(myStartTime);
end = moment(myEndTime);
if (now.isBetween(start, end)) {
console.log('This is happening now')
} else {
console.log('This is not happening now')
}
setTimeout(infiniteloop, 5000);
}
infiniteloop()
在页面渲染时被调用。由于变量myStartTims
和myEndTime
可能会发生变化,因此当它们发生变化时,需要再次调用该函数。但是它会运行多次。
所以我试着用
clearTimeout(infiniteloop);
infiniteloop();
但是这并不能解决问题。我怎样才能确保循环被停止并被再次调用呢?
2条答案
按热度按时间jvidinwx1#
这里有一个
setRepeating
,它与setInterval
有细微的不同。setInterval
调用会定期执行一些操作,而不管函数本身需要多长时间。而这个setRepeating
调用会运行函数,然后 * 在函数完成后 *,它会等待整个间隔时间,然后再运行它。这是烤一个蛋糕,然后等待一分钟,然后烤另一个蛋糕,与试图每分钟烤一个蛋糕之间的区别。
它在功能上也不同于
setInterval
,因为这个函数返回一个取消函数,而不是一个id,这是一个更干净的,IMO。因为你用一个定时器id做的唯一事情就是取消定时器。要“重启”它,只需再次调用
setRepeating
并获得一个新的cancel函数。wbgh16ku2#