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 ... 
随机推荐
- 空间数据库中ST_开头的来由
			1. 引言 在使用空间数据库(如,PostGIS)时,我们经常使用的空间函数(如,ST_Distance(geometry, geometry).ST_Area(geometry)等)都是以ST_开头 ... 
- Matplotlib 网格线
			我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线. grid() 方法语法格式如下: matplotlib.pyplot.grid(b=None, which='major', ... 
- 最全面 think php 实现微信公众号回复编号进行投票,自定义菜单功能
			前期准备工作 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messag ... 
- 判断PC端与移动端跳转
			var mobile_bs = { versions: function () { var u = navigator.userAgent; return { trid ... 
- 你可能不知道的HTML小技巧 面试题小技巧
			程序员面试题库分享 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全 推荐:★★★★★ 地址:前端技术导航大全 3.开发者颜色 ... 
- 快速替换jar包class文件的方法
			stetp1:jar -tvf *.jar | grep *.class 查找jar包中,class文件所在的具体路径stetp2:jar -xvf *.jar */*/*/*.class 当前目录下 ... 
- 如何实现chrome谷歌浏览器多开(独立环境 独立cookie)、改任务栏图标
			多开谷歌浏览器: 由于各种各样的原因,你可能需要在一个电脑登录某个平台,比如一个电脑登录3个公众号,或者3个知乎等等. 最简单的方案是,直接安装3个不同的浏览器,比如一个谷歌浏览器,一个火狐浏览器,一 ... 
- [localhost-startStop-1]
			第一次遇到Tomcat在Linux服务器启动卡住的情况,情况很简单,tomcat启动以后卡在INFO: Deploying web application directory ......这句话,具体 ... 
- Linux 安装jdk教程
			https://www.cnblogs.com/mabiao008/p/12059069.html 
- Linux  配置共享目录方法
			配置共享目录有三种方法: 第一种:使用Vmware自带的文件共享的功能,进入Vmware,点击虚拟机选项,然后点击"设置",再点击标签"选项"这一项,找到&qu ... 
