摘要:計時器統一管理,寫法該計時器標識符回調函數時間間隔,單位為秒回調函數參數初始化狀態遍歷計時器隊列計算間隔時間參數獲取插入隊列清除計時器刪除隊列項清除隊列調用清除清除所有計時器用實現,可以改用鏈接
計時器統一管理,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...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/110311.html
摘要:在軟件項目中,定時器也被應用到了各方各面,本文將從項目入手,講述定時器,本文的例子都以為例。定時器總類定時器有兩種對應重復任務和一次性任務。 在大規模分布式系統中,每個業務都可能是集群,每個業務機都會產生定時任務,不同的業務會有不同的任務管理需求,統一的任務調度和管理變得非常有必要。 定時如何準確,大量的定時被同時觸發怎么辦? 定時結束的時候,怎么通知業務機去處理呢? 某臺業務機下線...
摘要:在軟件項目中,定時器也被應用到了各方各面,本文將從項目入手,講述定時器,本文的例子都以為例。定時器總類定時器有兩種對應重復任務和一次性任務。 在大規模分布式系統中,每個業務都可能是集群,每個業務機都會產生定時任務,不同的業務會有不同的任務管理需求,統一的任務調度和管理變得非常有必要。 定時如何準確,大量的定時被同時觸發怎么辦? 定時結束的時候,怎么通知業務機去處理呢? 某臺業務機下線...
摘要:追蹤正在進行的計算的狀態。為了知道作業的進度,通過監聽端口來接受二進制文件發來的信息。子系統監聽的子系統包括多種預編譯二進制文件。這些二進制文件被分配給對應的在應用層定義好的計算模版。 KernelHive: a new workflow-based framework for multilevel high performance computing using clusters a...
閱讀 826·2021-11-22 11:59
閱讀 3230·2021-11-17 09:33
閱讀 2308·2021-09-29 09:34
閱讀 1941·2021-09-22 15:25
閱讀 1955·2019-08-30 15:55
閱讀 1321·2019-08-30 15:55
閱讀 530·2019-08-30 15:53
閱讀 3346·2019-08-29 13:55