摘要:計時器統(tǒng)一管理,寫法該計時器標識符回調(diào)函數(shù)時間間隔,單位為秒回調(diào)函數(shù)參數(shù)初始化狀態(tài)遍歷計時器隊列計算間隔時間參數(shù)獲取插入隊列清除計時器刪除隊列項清除隊列調(diào)用清除清除所有計時器用實現(xiàn),可以改用鏈接
計時器統(tǒng)一管理,es6 class寫法
let PRIVSTATE;//key for setInterval class Timer { /* * key construct * { * key:String//該計時器標識符 * call:fn,//回調(diào)函數(shù) * delay:Num,//時間間隔,單位為秒 * params:[]//回調(diào)函數(shù)參數(shù) * } */ static keys = []; //初始化狀態(tài)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){//參數(shù)獲取 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;
調(diào)用
import timer from "./timer.js" timer.setIn(handleFn,2,"timeSet") timer.cleanIn("timeSet")//清除timeSet timer.cleanIn()//清除所有計時器
用setinterval實現(xiàn),可以改用requestAnimationFrame
git鏈接https://github.com/xiaolu0018...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/110311.html
摘要:在軟件項目中,定時器也被應(yīng)用到了各方各面,本文將從項目入手,講述定時器,本文的例子都以為例。定時器總類定時器有兩種對應(yīng)重復(fù)任務(wù)和一次性任務(wù)。 在大規(guī)模分布式系統(tǒng)中,每個業(yè)務(wù)都可能是集群,每個業(yè)務(wù)機都會產(chǎn)生定時任務(wù),不同的業(yè)務(wù)會有不同的任務(wù)管理需求,統(tǒng)一的任務(wù)調(diào)度和管理變得非常有必要。 定時如何準確,大量的定時被同時觸發(fā)怎么辦? 定時結(jié)束的時候,怎么通知業(yè)務(wù)機去處理呢? 某臺業(yè)務(wù)機下線...
摘要:在軟件項目中,定時器也被應(yīng)用到了各方各面,本文將從項目入手,講述定時器,本文的例子都以為例。定時器總類定時器有兩種對應(yīng)重復(fù)任務(wù)和一次性任務(wù)。 在大規(guī)模分布式系統(tǒng)中,每個業(yè)務(wù)都可能是集群,每個業(yè)務(wù)機都會產(chǎn)生定時任務(wù),不同的業(yè)務(wù)會有不同的任務(wù)管理需求,統(tǒng)一的任務(wù)調(diào)度和管理變得非常有必要。 定時如何準確,大量的定時被同時觸發(fā)怎么辦? 定時結(jié)束的時候,怎么通知業(yè)務(wù)機去處理呢? 某臺業(yè)務(wù)機下線...
摘要:追蹤正在進行的計算的狀態(tài)。為了知道作業(yè)的進度,通過監(jiān)聽端口來接受二進制文件發(fā)來的信息。子系統(tǒng)監(jiān)聽的子系統(tǒng)包括多種預(yù)編譯二進制文件。這些二進制文件被分配給對應(yīng)的在應(yīng)用層定義好的計算模版。 KernelHive: a new workflow-based framework for multilevel high performance computing using clusters a...
閱讀 832·2021-11-22 11:59
閱讀 3247·2021-11-17 09:33
閱讀 2317·2021-09-29 09:34
閱讀 1948·2021-09-22 15:25
閱讀 1965·2019-08-30 15:55
閱讀 1327·2019-08-30 15:55
閱讀 539·2019-08-30 15:53
閱讀 3353·2019-08-29 13:55