js——带暂停、启动功能的定时
简单的封装,将 interval 二次封装,对外提供暂停、启动功能。
不足之处:interval定时间隔是固定的,在调用异步函数的时候,可能会出现bug。
例如:在调用ajax异步请求过程中,发送a、b两个请求,后台接到a请求需要3秒,接到b只需要1秒,b可能会优先于a执行。
(这种情况,需要用setTimeout()封装,等待前一个ajax完全结束,再启动下一个。业务代码与定时任代码会发生强耦合,暂时不考虑封装)
let Scheduled = function (){
}
/**
* 循环作业
* @param call 任务
* @param timeout 时间间隔
* @return {{star: star, parse: parse, isRunning: isRunning}}
* @constructor
*/
let CycleWork = function (call, timeout) {
let interval = undefined;
return {
/**
* 暂停
*
* @returns void
*/
parse: function () {
if (interval !== undefined) {
window.clearInterval(interval);
interval = undefined;
}
},
/**
* 启动任务
*
* @returns void
*/
star: function () {
interval = window.setInterval(call, timeout);
},
/**
* 是否在跑批中
*
* @return {boolean}
*/
isRunning: function (){
return interval !== undefined;
}
}
}
/**
* 执行一个循环任务
*
* @param call 任务
* @param times 次数
* @param timeout 时间间隔
*/
Scheduled.prototype.runCycleWork = function (call, times, timeout) {
let n = Math.abs(times);
let interval = window.setInterval(() => {
if (n === 0) {
window.clearInterval(interval);
} else {
n--;
call();
}
}, timeout);
}
Scheduled.prototype.CycleWork = CycleWork;
//保证单例,不需要第二个Layers
let scheduled = new Scheduled();
export default scheduled;
使用方式:
import Scheduled from '../../components/widget/scheduled'
export default {
created: function () {
let work = new Scheduled.CycleWork(()=>{console.log('test')}, 1000);
work.start();
Scheduled.runCycleWork(()=>{console.log('test2')}, 3, 1000);
}
}
js——带暂停、启动功能的定时的更多相关文章
- ASP.NET MVC 4 RC的JS/CSS打包压缩功能 (转载)
ASP.NET MVC 4 RC的JS/CSS打包压缩功能 打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载 ...
- C# 创建Windows服务。服务功能:定时操作数据库 (转)
C# 创建Windows服务.服务功能:定时操作数据库 一.创建window服务 1.新建项目-->选择Windows服务.默认生成文件包括Program.cs,Service1.cs 2.在S ...
- JS 实现百度搜索功能
今天我们来用JS实现百度搜索功能,下面上代码: HTML部分: <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- css和js带参数v或version
1 <span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?versi ...
- js实现回到顶部功能
js实现回到顶部功能 一.总结 一句话总结: 可以通过js或者jquery可以很快的控制页面的属性,比如高度等等 //设置当前视口的顶端数值 var setScrollTop = function(t ...
- MFC带参数启动指令发送与接收
MFC带参数启动指令发送与接收 发送 使用ShellExecute函数打开文件或执行程序. 函数原型: HINSTANCE ShellExecute( _In_opt_ HWND hwnd,//父窗口 ...
- 原生JS实现购物车结算功能代码+zepto版
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- 利用其它带文件防护功能的软件防止*.asp;*.jpg写入文件。
此木马是一个.NET程序制作,如果你的服务器支持.NET那就要注意了,,进入木马有个功能叫:IIS Spy,点击以后可以看到所有站点所在的物理路径.以前有很多人提出过,但一直没有人给解决的答案.. 防 ...
- 初探JavaScript(三)——JS带我"碰壁"带我飞
已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...
- Myeclipse2014 自带的报表功能 与 Eclipse BIRT
Myeclipse2014 自带的报表功能跟 Eclipse BIRT 差不多,但不兼容 1.只能是MyEclipse Web projects 或者 Report Web project不支持B ...
随机推荐
- CKeditor页面公式不显示
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax. ...
- 都在用 AI 生成美少女,而我却。。。
最近 AI 画画特别的火,你能从网上看到非常多好看的图片,于是我就开始了我的安装之旅,我看到的图是这样的. 这样的. 还有这样的. 然后我就开始了我的 AI 安装生成计划. 安装环境 首先我们需要安装 ...
- 开源项目推荐:3D点云处理软件CloudCompare,
3D point cloud and mesh processing software,Open Source Project,Based on Qt5. CloudCompare是一款基于GPL开源 ...
- C#神器"BlockingCollection"类实现C#神仙操作
前言 如果你想玩转C# 里面多线程,工厂模式,生产者/消费者,队列等高级操作,就可以和我一起探索这个强大的线程安全提供阻塞和限制功能的C#神器类 BlockingCollection简单介绍 微软介绍 ...
- ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具
摘要:本文介绍了昇腾CANN提供的模型转换工具ATC,介绍了其功能.架构,并以具体样例介绍了该工具的基本使用方法以及常用设置. 本文分享自华为云社区<使用ATC工具将主流开源框架模型转换为昇腾模 ...
- Lambda表达式和Collection集合
Lambda表达式 Lambda表达式理解 Lambda表达式是Jdk 8 开始新增的一种语法形式:作用:用于简化匿名内部类的代码写法 注意:Lambda表达式只能简化函数式接口的匿名内部类!!! 什 ...
- 【调试】ftrace(一)基本使用方法
简介 Ftrace是Linux Kernel的官方tracing系统,支持Function trace.静态tracepoint.动态Tracepoint的跟踪,还提供各种Tracer,用于统计最大i ...
- STM32 I2C介绍和软件模拟I2C编程要点
I2C协议层独特特征: 1. 通过地址(Master/Slave Address)区分不同的设备. 2. ACK信号体制,即通过ACK表示是否进行继续传输. 3.由SCL.SDA的四种关系,映射数据有 ...
- 【Redis的三种数据删除策略】定时定期惰性,超出内存就自动清理
https://blog.csdn.net/DQWERww/article/details/126453008 https://blog.csdn.net/qq_38056518/article/de ...
- 浅谈zookeeper
zookeeper用来解决高可用问题,具有高可用,高性能,具有严格的顺序(只要是分布式系统就会是一个严格的顺序)访问控制能力的分布式协调服务,做分布式协调的作用,可以做服务的同步,维护配置文件和命名服 ...