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底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的 ...
随机推荐
- Serverless计算
云服务的演化历程 整个it系统服务的搭建,随着时间有多个层级的演化.从最早的内部部署(On-premises) 到基于云的Iaas,Paas,Saas,Baas, Faas.服务的构建对开发者越来友好 ...
- Docker挂载主机目录到容器
docker run -it -v /宿主机绝对目录:/容器内目录 镜像名
- oracle中的常用函数、字符串函数、数值类型函数、日期函数,聚合函数。
一.字符串的常用函数. --一.oracle 字符串常用函数 --1. concat 连接字符串的函数,只能连接[两个]字符串. 字符写在括号中,并用逗号隔开! --2."||"符 ...
- 反汇编分析C++代码
编译环境:Windows 10 + VS2015 1.问题引入 在Win32环境下,CPU小端模式,参数用栈来传递,写出输出结果. 代码如下: int main() { long long a = 1 ...
- APC 篇——初识 APC
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- CKKS加密方案
本文内容来自"Protecting Privacy throughHomomorphic Encryption",主要学习里面的CKKS部分. CKKS是一种同态加密方案,其安全性 ...
- 社交网络分析的 R 基础:(四)循环与并行
前三章中列出的大多数示例代码都很短,并没有涉及到复杂的操作.从本章开始将会把前面介绍的数据结构组合起来,构成真正的程序.大部分程序是由条件语句和循环语句控制,R 语言中的条件语句(if-else)和 ...
- 「JOI 2015 Final」舞会
「JOI 2015 Final」舞会 略微思考一下即可知该过程可以化为一棵树.(3个贵族中选择1个,即新建一个节点连向这3个贵族). 该树的结点个数为\(2n\). 考虑二分答案mid. 判定的是公主 ...
- JS generator(生成器)
笔记整理自:廖雪峰老师的JS教程 目录 简介 与函数的不同之处 函数写法 generator写法 generator调用 generator对象的`next()`方法调用 `for ... of`循环 ...
- nginx入门教程 (转)
1.Nginx 状态码配置和错误文件 server { # 配置访问 /test.js 时报 403 错 location /test.js { return 403; } # 配置访问 /404 时 ...