Prototype PeriodicalExecuter对象 学习


Posted in Javascript onJuly 19, 2009

This is a simple facility for periodical execution of a function. This essentially encapsulates the native clearInterval/setInterval mechanism found in native Window objects.

This is especially useful if you use one to interact with the user at given intervals (e.g. use a prompt or confirm call): this will avoid multiple message boxes all waiting to be actioned.

这个对象就是可以周期性的执行某个方法,但是在它内部维持了一个状态,可以防止由于某些原因一次调用没执行,然后下一次调用又来了,这样会造成连续执行两次方法。上面的第二断英文就是这个意思。

帮助文档上说这个对象只提供了一个方法stop,但是在我看的源码里还提供了一个事件onTimerEvent,应该可以在某个时候触发这个事件。但帮助文档上没有给出示例。

这个对象源码比较简单,这里直接贴出来了,就不再注释了:

var PeriodicalExecuter = Class.create({ 
initialize: function(callback, frequency) { 
this.callback = callback; 
this.frequency = frequency; 
this.currentlyExecuting = false; this.registerCallback(); 
}, 
registerCallback: function() { 
this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); 
}, 
execute: function() { 
this.callback(this); 
}, 
stop: function() { 
if (!this.timer) return; 
clearInterval(this.timer); 
this.timer = null; 
}, 
onTimerEvent: function() { 
if (!this.currentlyExecuting) { 
try { 
this.currentlyExecuting = true; 
this.execute(); 
} catch(e) { 
/* empty catch for clients that don't support try/finally */ 
} 
finally { 
this.currentlyExecuting = false; 
} 
} 
} 
});

看一下示例:
new PeriodicalExecuter(function(pe) { 
if (!confirm('Want me to annoy you again later?')) 
pe.stop(); }, 
5); 
// Note that there won't be a stack of such messages if the user takes too long 
// answering to the question...
Javascript 相关文章推荐
用js实现的一个Flash滚动轮换显示图片代码生成器
Mar 14 Javascript
基于jQuery的仿flash的广告轮播代码
Nov 04 Javascript
Javascript 面向对象编程(一) 封装
Aug 28 Javascript
基于jquery库的tab新形式使用
Nov 16 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
Jun 17 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 Javascript
vue 组件 全局注册和局部注册的实现
Feb 28 Javascript
Node.js操作MongoDB数据库实例分析
Jan 19 Javascript
Element Dialog对话框的使用示例
Jul 26 Javascript
Prototype String对象 学习
Jul 19 #Javascript
Prototype Template对象 学习
Jul 19 #Javascript
Prototype Number对象 学习
Jul 19 #Javascript
Prototype ObjectRange对象学习
Jul 19 #Javascript
Prototype RegExp对象 学习
Jul 19 #Javascript
Prototype Class对象学习
Jul 19 #Javascript
javascript iframe内的函数调用实现方法
Jul 19 #Javascript
You might like
提升PHP执行速度全攻略(下)
2006/10/09 PHP
php&mysql 日期操作小记
2012/02/27 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
python通过索引遍历列表的方法
2015/05/04 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
详解python之配置日志的几种方式
2017/05/22 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
详解python with 上下文管理器
2020/09/02 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
世界最大的票务市场:viagogo
2017/02/16 全球购物
十佳中学生事迹材料
2014/06/02 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
python百行代码实现汉服圈图片爬取
2021/11/23 Python