javaScript(js)手写原生任务定时器源码
javaScript(js)手写原生任务定时器
功能介绍
定时器顾名思义就是在某个特定的时间去执行一些任务,现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了。通过时间表达式来进行调度和执行的一类任务被称为定时任务,很多业务需求的实现都离不开定时任务。
在javascript中要实现定时任务也是很简单的,可以选择插件,也可以自己写一个简单的定时任务,这里就个给大家写一个简单的 setInterval() 循环定时任务。功能有,启动定时任务、停止定任务、添加定时任务、清除定时任务、执行定时器的方法。
实现调用演示
1.定义两个方法 有参和无参
function a1(value = "") {
console.log("定时任务被调用了 携带的参数==>>", value)
} function a2() {
console.log("定时任务被调用了 我是无参数")
}
2. 实现定时任务
let daily_time = {
func: a1,
parm: "我是每秒",
year: "*",
month: "*",
date: "*",
hours: "*",
minutes: "*",
seconds: "*"
}
let monthly_transaction = {
func: a2,
parm: null,
year: "*",
month: "*",
date: "*",
hours: "*",
minutes: "1",
seconds: "*"
} let monthly_summary = {
func: a1,
parm: "我是每小时 1分 1秒",
year: "*",
month: "*",
date: "*",
hours: "*",
minutes: "1",
seconds: "1"
}
addTimer(daily_time)
addTimer(monthly_transaction)
addTimer(monthly_summary)
startTimer()
创建定时任务js 代码文件 复制使用即可
bg-timer.js
// 缓存定时任务
// {
// func 方法名
// parm 方法参数 // year 年
// month 月
// date 日
// hours 时
// minutes 分
// seconds 秒
// }
// * 表示每刻都执行 数字 表示定时这个时间执行
/**
* 每年 1月1日1时1分1秒
* year *
* month 1
* date 1
* hours 1
* minutes 1
* seconds 1
*/
/**
* 每年每月每日每时1分每秒
* year *
* month *
* date *
* hours *
* minutes 1
* seconds *
*/
/**
* 每秒
* year *
* month *
* date *
* hours *
* minutes *
* seconds *
*/
var timer_list = []
var is_timer = null // 启动
function startTimer() {
console.log("启动定时任务")
if (!is_timer) {
timeoutFunc()
}
} // 停止
function stopTimer() {
console.log("停止定时任务")
if (is_timer) {
clearInterval(is_timer);
is_timer = null
}
} // 清除定时任务
function cleanTimer() {
stopTimer()
timer_list = []
} // 添加定时任务
function addTimer(item = {}) {
let n = {
"func": item.func || null,
"parm": item.parm || null,
"year": item.year || "*",
"month": item.month || "*",
"date": item.date || "*",
"hours": item.hours || "*",
"minutes": item.minutes || "*",
"seconds": item.seconds || "*"
}
timer_list.push(n)
} function timeoutFunc() {
if (is_timer) {
return
}
is_timer = setInterval(function() {
let da = new Date()
let fullYear = (da.getFullYear()).toString()
let month = (da.getMonth()).toString()
let dat = (da.getDate()).toString()
let hours = (da.getHours()).toString()
let minutes = (da.getMinutes()).toString()
let seconds = (da.getSeconds()).toString() // console.log("定时......",timer_list)
// console.log("年:", fullYear)
// console.log("月:", month)
// console.log("日:", dat)
// console.log("时:", hours)
// console.log("分:", minutes)
// console.log("秒:", seconds) for (let i in timer_list) {
let item = timer_list[i] if (item.year != "*" && item.year != fullYear) {
continue
}
if (item.month != "*" && item.month != month) {
continue
}
if (item.date != "*" && item.date != dat) {
continue
}
if (item.hours != "*" && item.hours != hours) {
continue
}
if (item.minutes != "*" && item.minutes != minutes) {
continue
}
if (item.seconds != "*" && item.seconds != seconds) {
continue
}
console.log("调用定时任务", item)
if (item.func && item.parm) {
item.func(item.parm)
} else {
item.func()
}
}
}, 1000)
}
结束:
感谢个朋友们的支持,如有喜欢请点赞评论
现在最简单的定时任务已经完成了,各位朋友可以从此基础去往更深层次的定时任务进行下一步的研发和修改。也希望各位朋友把研发结果分析在评论区。
点个赞呗!
javaScript(js)手写原生任务定时器源码的更多相关文章
- OpenCV+TensorFlow图片手写数字识别(附源码)
初次接触TensorFlow,而手写数字训练识别是其最基本的入门教程,网上关于训练的教程很多,但是模型的测试大多都是官方提供的一些素材,能不能自己随便写一串数字让机器识别出来呢?纸上得来终觉浅,带着这 ...
- Spring学习之——手写Mini版Spring源码
前言 Sping的生态圈已经非常大了,很多时候对Spring的理解都是在会用的阶段,想要理解其设计思想却无从下手.前些天看了某某学院的关于Spring学习的相关视频,有几篇讲到手写Spring源码,感 ...
- 原生html、js手写 radio与checkbox 美化
原生html.js手写 radio与checkbox 美化 html <!DOCTYPE html> <html> <head> <meta charse ...
- 手写原生ajax
关于手写原生ajax重要不重要,各位道友自己揣摩吧, 本着学习才能进步,分享大家共同受益,自己也在自己博客里写一下 function createXMLHTTPRequest() { //1.创建XM ...
- 常见的JS手写函数汇总(代码注释、持续更新)
最近在复习面试中常见的JS手写函数,顺便进行代码注释和总结,方便自己回顾也加深记,内容也会陆陆续续进行补充和改善. 一.手写深拷贝 <script> const obj1 = { name ...
- 【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)
文章提纲: 第一部分:介绍模块规范及之间区别 第二部分:以 node.js 实现模块化规范 源码,深入学习. 一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须 ...
- 6 手写Java LinkedHashMap 核心源码
概述 LinkedHashMap是Java中常用的数据结构之一,安卓中的LruCache缓存,底层使用的就是LinkedHashMap,LRU(Least Recently Used)算法,即最近最少 ...
- 3 手写Java HashMap核心源码
手写Java HashMap核心源码 上一章手写LinkedList核心源码,本章我们来手写Java HashMap的核心源码. 我们来先了解一下HashMap的原理.HashMap 字面意思 has ...
- 2 手写Java LinkedList核心源码
上一章我们手写了ArrayList的核心源码,ArrayList底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的 ...
随机推荐
- gorm创建记录及设置字段默认值
package main import ( "database/sql" "gorm.io/driver/mysql" "gorm.io/gorm&q ...
- Clusternet:一款开源的跨云多集群云原生管控利器!
作者 徐迪,Clusternet 项目发起人,腾讯云容器技术专家. 摘要 Clusternet (Cluster Internet)是一个兼具多集群管理和跨集群应用编排的开源云原生管控平台,解决了跨云 ...
- HTTPS加密证书(1)
目录 一:HTTPS 1.HTTPS简介 二:模拟网站劫持 1.正常的页面(web01) 2.文件增加权限 3.编写文件网址配置 4.网址测试 三:安装鲨鱼鳍(抓取数据包) 四:(网站劫持)lb代理 ...
- R-B Tree
1.简介 R-B Tree,全称Red-Black Tree,又称为"红黑树",为一种自平衡二叉查找树(特殊的平衡二叉树,都是在插入和删除操作时通过特定操作保持二叉树的平衡,从而获 ...
- Net6 DI源码分析Part2 Engine,ServiceProvider
ServiceProvider ServiceProvider是对IServiceProvider实现,它有一个internal的访问修饰符描述的构造,并需要两个参数IServiceCollectio ...
- AT2689 [ARC080D] Prime Flip
简要题解如下: 区间修改问题,使用差分转化为单点问题. 问题变成,一开始有 \(2n\) 个点为 \(1\),每次操作可以选择 \(r - l\) 为奇质数的两个点 \(l, r\) 使其 ^ \(1 ...
- RPC和REST的区别
REST定义 REST是一种架构风格,指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 RESTful.REST规范把所有内容都视为资源,网络上一切皆资源.REST并没有创造新 ...
- JAVA多线程学习十一-线程锁技术
前面我们讲到了synchronized:那么这节就来将lock的功效. 一.locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---Abst ...
- Mysql批量删除和修改某个前缀的表
1.批量删除某个前缀的表名,首先选出这些个表. select concat( 'drop table ', table_name, ';' ) from information_schema.tabl ...
- Docker consul的容器服务更新与发现
Docker consul的容器服务更新与发现 目录 Docker consul的容器服务更新与发现 一.Consul简介 1. 服务注册与发现 2. consul概述 3. consul的两种模式 ...