摘要:计时器统一管理,写法该计时器标识符回调函数时间间隔,单位为秒回调函数参数初始化状态遍历计时器队列计算间隔时间参数获取插入队列清除计时器删除队列项清除队列调用清除清除所有计时器用实现,可以改用链接
计时器统一管理,es6 class写法
let PRIVSTATE;//key for setInterval class Timer { /* * key construct * { * key:String//该计时器标识符 * call:fn,//回调函数 * delay:Num,//时间间隔,单位为秒 * params:[]//回调函数参数 * } */ static keys = []; //初始化状态interval-key // static PRIVSTATE = null; static init() { if (!PRIVSTATE && this.keys.length) { PRIVSTATE = window.setInterval(() => { this.keys.map(item => {//遍历计时器队列 if (item) { let { call, delay, params } = item; delay = delay ? parseInt(delay) : 1; if(!item.delay_count){ item.delay_count = delay; } item.delay_count--; if (item.delay_count <= 0) {//计算间隔时间 item.delay_count = delay; if (params && params.length) { call && call(...params); } else { call && call(); } } } }) }, 1000); } }; static setIn(...rest) { let callObj = {}; for(var o of rest){//参数获取 switch (Object.prototype.toString.call(o)) { case "[object Array]": callObj.params = o; break; case "[object String]": callObj.key = o; break; case "[object Number]": callObj.delay = o; break; case "[object Function]": callObj.call = o; break; default: console.log("noValide param") break; } } if(callObj.call){ if(!callObj.key){ console.log(callObj.call.name); callObj.key = callObj.call.name; } let itemIn = this.keys.findIndex(item => item.key && item.key === callObj.key); if (itemIn >= 0) {//插入队列 this.keys[itemIn] = callObj; } else { this.keys.push(callObj); } this.init(); } }; static cleanIn(key) {//String//清除计时器 if (key) { let itemIn = this.keys.findIndex(item => item.key && item.key === key); if (itemIn >= 0) { this.keys.splice(itemIn, 1);//删除队列项 } else { console.error("no Key"); } }else{ //TODO clean All this.keys = [];//清除队列 } if (!this.keys.length && PRIVSTATE) { window.clearInterval(PRIVSTATE); PRIVSTATE = null; } } }; export default Timer;
调用
import timer from "./timer.js" timer.setIn(handleFn,2,"timeSet") timer.cleanIn("timeSet")//清除timeSet timer.cleanIn()//清除所有计时器
用setinterval实现,可以改用requestAnimationFrame
git链接https://github.com/xiaolu0018...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/110311.html
摘要:在软件项目中,定时器也被应用到了各方各面,本文将从项目入手,讲述定时器,本文的例子都以为例。定时器总类定时器有两种对应重复任务和一次性任务。 在大规模分布式系统中,每个业务都可能是集群,每个业务机都会产生定时任务,不同的业务会有不同的任务管理需求,统一的任务调度和管理变得非常有必要。 定时如何准确,大量的定时被同时触发怎么办? 定时结束的时候,怎么通知业务机去处理呢? 某台业务机下线...
摘要:在软件项目中,定时器也被应用到了各方各面,本文将从项目入手,讲述定时器,本文的例子都以为例。定时器总类定时器有两种对应重复任务和一次性任务。 在大规模分布式系统中,每个业务都可能是集群,每个业务机都会产生定时任务,不同的业务会有不同的任务管理需求,统一的任务调度和管理变得非常有必要。 定时如何准确,大量的定时被同时触发怎么办? 定时结束的时候,怎么通知业务机去处理呢? 某台业务机下线...
摘要:追踪正在进行的计算的状态。为了知道作业的进度,通过监听端口来接受二进制文件发来的信息。子系统监听的子系统包括多种预编译二进制文件。这些二进制文件被分配给对应的在应用层定义好的计算模版。 KernelHive: a new workflow-based framework for multilevel high performance computing using clusters a...
阅读 809·2021-11-22 11:59
阅读 3193·2021-11-17 09:33
阅读 2289·2021-09-29 09:34
阅读 1921·2021-09-22 15:25
阅读 1908·2019-08-30 15:55
阅读 1304·2019-08-30 15:55
阅读 514·2019-08-30 15:53
阅读 3322·2019-08-29 13:55