读Ext之七(多任务定时管理)
Ext.util.TaskRunner 用来管理多任务定时管理。每一个任务是一个JS对象,具有以下属性
run, interval, args, scope, duration, repeat。
示例如下:
var task = { run : function(){...}, interval : 1000, args : [], scope : obj, duration : 5000, repeat : 3 }
run和interval是必选,其它为可选。
鸟瞰类如下:
Ext.util.TaskRunner = function(interval){ interval = interval || 10; var tasks = [], removeQueue = [], id = 0, running = false, ... // private runTasks = function(){ ... }; this.start = function(task){ ... }; this.stop = function(task){ ... }; this.stopAll = function(){ ... }; }; Ext.TaskMgr = new Ext.util.TaskRunner();
Ext.util.TaskRunner 为一个类,需要new后使用。定义方式同Ext.util.DelayedTask ,采用构造函数方式 。
向外提供了三个接口方法,start,stop,stopAll。另外一堆私有函数协助构造整个类,其中最重要的为runTasks,this.start中调用其。
最后一句可以看到给顶级的命名空间Ext上挂了个TaskMgr,Ext库自身使用使用 Ext.TaskMgr 进行多任务定时管理。
下面先列出该类的使用
示例1
// 创建一个任务管理对象 var taskMgr = new Ext.util.TaskRunner(); // 创建一个任务 var task1 = { run : function(){ console.log('test'); }, interval : 1000 }; // 开始执行任务task1 taskMgr.start(task1);
从控制台可以看到每隔一秒输出了一次test。run为function类型,即表示一个任务。interval为Number类型,表示任务执行间隔的时间。
示例2
// 创建一个任务管理对象 var taskMgr = new Ext.util.TaskRunner(); // 创建一个任务 var task1 = { run : function(){ console.log(arguments); console.log(this); }, interval : 1000, args : [1,2], scope : window }; // 开始执行任务task1 taskMgr.start(task1);
从控制台可以看到每隔一秒输出了"[1,2]","window"。即args(Array类型)为run调用时的参数,scope(Object类型)为run执行时的上下文。
示例3
// 创建一个任务管理对象 var taskMgr = new Ext.util.TaskRunner(); // 创建一个任务 var task1 = { run : function(){ console.log('test'); }, interval : 1000, duration : 5000 }; // 开始执行任务task1 taskMgr.start(task1);
从控制台可以看到仍然是每隔一秒输出一次"test",但5秒后就停止了。即duration(整数,单位为毫秒)为任务run持续执行的时间,超过该时间不再执行。注意,duration设置为4900也会执行5次。
示例4
// 创建一个任务管理对象 var taskMgr = new Ext.util.TaskRunner(); // 创建一个任务 var task1 = { run : function(){ console.log('test'); }, interval : 1000, repeat : 3 }; // 开始执行任务task1 taskMgr.start(task1);
从控制台可以看到仍然是每隔一秒输出一次"test",但输出3次后就停止了。即repeat(Number类型)为任务run执行的次数,超过该次数不再执行。注意,repeat不能为小数(如3.3),否则将会一直执行而不是执行3次。
以上示例了解到了任务对象的各个属性意义。但仅仅是一个任务,
// 创建一个任务管理对象 var taskMgr = new Ext.util.TaskRunner(); // 创建一个任务 var task1 = { run : function(){ console.log('test1'); }, interval : 1000, }; var task2 = { run : function(){ console.log('test2'); }, interval : 3000, }; // 开始执行任务 taskMgr.start(task1); taskMgr.start(task2);
从控制台可以看到仍然第一秒输出"test1","test2",第二秒时只输出test1,第三秒又输出"test1","test2"。即有两个任务在执行。
明白了start方法,stop和stopAll方法就很好理解了。无须复述。