PeriodicalExecuter
这是一个简单实用的工具,用于定期执行一个指定的函数。从本质上来说,它是封装原生 Window
对象的 setInterval
/clearInterval
机制。
PeriodicalExecuter
具有一项值得注意的非常有用的特性:它会阻止回调函数的多次并发执行,
并顺延执行的时间间隔(它维护一个内部的运行标志,用于屏蔽回调函数运行时的产生的异常)。如果需要定时与用户进行交互
(如使用一个 prompt
或 confirm
),这非常有用,它将会避免在等待响应时产生多个信息框。
当然,当前一个非常好的观点是:应尽量使用一个实际的对象,而不是维护一个全局的定时器句柄。这也算是
PeriodicalExecuter
的一项优势吧。
创建 PeriodicalExecuter
对象
PeriodicalExecuter
的构造函数有两个参数:回调函数和时间间隔(以秒为单位)。
该对象启动后,会无限制的触发执行回调函数,直到页面卸载为止(浏览器通常会在一个适当的时机清除所有的定时器和延时器)。
当然,你也可以调用 stop 方法手动停止。
new PeriodicalExecuter(pollChatRoom, 3);
new PeriodicalExecuter(function(pe) {
if (!confirm('Want me to annoy you again later?'))
pe.stop();
}, 5);
// 注意,即使用户长时间不响应,这里也不会弹出一大堆询问信息
译注:其实对于上面的样例,简单的使用原生的 setInterval
也不会弹出一大堆的信息框(包括 IE
和 FireFox),甚至于在浏览器中要弹出一大堆信息框还是一件困难的事。所以对于该文第二段的解释,我觉得有些勉强,或许是我理解有误?
使用 setInterval
实现上述例子:
var interval = setInterval(function(){
if (!confirm('Want me to annoy you again later?'))
clearInterval(interval);
}, 5000)
方法
stop
stop()
停止 PeriodicalExecuter
的执行,回调函数不会再次被触发。