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底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的 ...
随机推荐
- gin中XML/JSON/YAML/ProtoBuf 渲染
package main import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/testdata/p ...
- python语法缩进
1.python会根据缩进来判断代码行和前一句代码行之间的关系 2.for循环后一定要缩进,for循环后面的冒号代表告诉python,下面是代码行缩进的第一行
- python14day
昨日回顾 匿名函数:一句话函数 内置函数II 闭包: 内层函数对外层函数非全局变量的引用 一定存在于嵌套函数中 作用:保护数据安全,自由变量不会在内存中消失,而且全局还引用不到 今日内容 装饰器: 装 ...
- ApacheCN 大数据译文集 20211206 更新
PySpark 大数据分析实用指南 零.前言 一.安装 Pyspark 并设置您的开发环境 二.使用 RDD 将您的大数据带入 Spark 环境 三.Spark 笔记本的大数据清理和整理 四.将数据汇 ...
- WebService、Http请求、Socket请求
WebService 定义 一种web程序访问方式,常见协议:SOAP(简单对象访问协议),其实就是Http+XML.利用对象进行数据交互. 请求方法 import lombok.extern.slf ...
- IAAS, SAAS, PAAS
原文是Pizza‐as‐a‐Service: a detailed view,用来类比Cloud Service Models.出处来自于Data Sovereignty and the Cloud ...
- Javascript疑问【长期更新】
1.插入 Javacript 的正确位置是? 答:<body> 部分和 <head> 部分均可. 2.外部脚本必须包含 <script> 标签吗? 答:外部脚本不能 ...
- DNS解析域名过程
DNS解析域名过程 使用域名转换成IP地址,先读取本地HOST文件,本地文件没有从当前电信网管获取对应IP. 本地host文件 C:\Windows\System32\drivers\etc 画图演示 ...
- 如何使PreparedStatement支持命名参数
http://m.blog.csdn.net/wallimn/article/details/3734242
- 线性结构和非线性结构、稀疏数组、队列、链表(LinkedList)
一.线性结构和非线性结构 线性结构: 1)线性绪构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺 ...