更改 setInterval 的间隔时间

4

除了使用clearInterval清除定时器并重新设置不同的值之外,在运行时是否有一种修改使用setInterval函数设置的调用间隔的方法?


4
不。 - Ryan Kinal
请参见:https://dev59.com/ZG7Xa4cB1Zd3GeqPsaxz#14969792 - Ja͢ck
http://stackoverflow.com/a/29823252/1478566 - vbarbarosh
2个回答

14
请使用setTimeout,此外,这是一种非阻塞的异步JS方法:
var interval = 1000;

function callback() {
   console.log( 'callback!' );
   interval -= 100; // actually this will kill your browser when goes to 0, but shows the idea
   setTimeout( callback, interval );
}

setTimeout( callback, interval );

不要使用setInterval,因为在某些情况下(大量的setInterval + 长回调函数,通常比超时时间更长),由于队列大小有限,浏览器将会丢弃一些回调并且永远不会执行。只有setTimeout可以保证执行。


3

如果你使用了setInterval(),那么删除间隔再重新添加是解决问题的方法。

然而,你也可以通过在最后使用可变延迟反复调用setTimeout()来实现相同的目标。

出于好奇,你想修改间隔做什么?也许使用requestAnimationFrame()更加合适?


这是关于使用可变时间尺度更新图表的问题。较大的时间尺度=“更重”的数据库请求,但数据点更稀疏。如果绘图要显示过去2分钟内每1秒钟一个数据点的数据,则应每1秒钟更新一次。如果用户选择每个数据点代表过去20小时中的10分钟,则没有必要每10分钟更新一次。 - SF.
@SF。谢谢,这很有趣,也使得你的目标完全合适。 - Phrogz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接