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 ...
随机推荐
- PostgresSql更改字段位置后,数据库异常
SQL server的studio有一个功能,可以随意拖拽表字段,更改其位置并使之重新排序,有同事问起,Postgres是否也可以.Postgres每个字段的顺序是在系统表pg_attribute里面 ...
- java数据结构与算法(day2)--简单排序
模式:设计api实现api 简单排序 举例(商品排序) 1.1Comparable接口介绍(排序算法更有通用性:对象排序) 创建对象,并且生成豆子.创建Comparable接口 1 package c ...
- Docker 安装mysql8
1.获取镜像 docker pull mysql:8 2.创建数据卷 必须创建数据卷,不然容器挂了数据就丢了 docker volume create mysql-data #创建docker vol ...
- 百度脑图kityminder
KityMinder Editor 是一款强大.简洁.体验优秀的脑图编辑工具,适合用于编辑树/图/网等结构的数据. 编辑器由百度 FEX 基于 kityminder-core 搭建,并且在百度脑图中使 ...
- java学习日记20230301-API文档
JAVA API java application programming interinterface 应用程序编程接口,是java提供的基本编程接口 在线文档:https://www.matoo ...
- VUE学习-监听事件
监听事件 事件处理方法可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码. <div id="app"> <button v ...
- centos8下安装gcc11
最近的云服务器使用的centos8,c以前编译器对c++20的新特性支持的较少,当前最新版的gcc对c++20的支持还是可以的,于是准备体验一下,首要就是升级gcc gcc官网:https://gcc ...
- Wordpress指定关键词手动添加链接
方法:网站后台->外观->编辑->找到functions.php文件 wp-content/themes/当前外观/functions.php 在当前外观的functions.php ...
- 获取Java运行环境信息
设备相关信息 获取设备名称 import java.net.InetAddress; import java.net.UnknownHostException; try { InetAddress l ...
- 【ADB命令】获取应用包名
打开cmd,输入命令,然后点击要查看的应用,即可获取对应包名. adb shell am monitor