简单的封装,将 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——带暂停、启动功能的定时的更多相关文章

  1. ASP.NET MVC 4 RC的JS/CSS打包压缩功能 (转载)

    ASP.NET MVC 4 RC的JS/CSS打包压缩功能 打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载 ...

  2. C# 创建Windows服务。服务功能:定时操作数据库 (转)

    C# 创建Windows服务.服务功能:定时操作数据库 一.创建window服务 1.新建项目-->选择Windows服务.默认生成文件包括Program.cs,Service1.cs 2.在S ...

  3. JS 实现百度搜索功能

    今天我们来用JS实现百度搜索功能,下面上代码: HTML部分: <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  4. css和js带参数v或version

    1 <span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?versi ...

  5. js实现回到顶部功能

    js实现回到顶部功能 一.总结 一句话总结: 可以通过js或者jquery可以很快的控制页面的属性,比如高度等等 //设置当前视口的顶端数值 var setScrollTop = function(t ...

  6. MFC带参数启动指令发送与接收

    MFC带参数启动指令发送与接收 发送 使用ShellExecute函数打开文件或执行程序. 函数原型: HINSTANCE ShellExecute( _In_opt_ HWND hwnd,//父窗口 ...

  7. 原生JS实现购物车结算功能代码+zepto版

    html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  8. 利用其它带文件防护功能的软件防止*.asp;*.jpg写入文件。

    此木马是一个.NET程序制作,如果你的服务器支持.NET那就要注意了,,进入木马有个功能叫:IIS Spy,点击以后可以看到所有站点所在的物理路径.以前有很多人提出过,但一直没有人给解决的答案.. 防 ...

  9. 初探JavaScript(三)——JS带我"碰壁"带我飞

    已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...

  10. Myeclipse2014 自带的报表功能 与 Eclipse BIRT

    Myeclipse2014 自带的报表功能跟 Eclipse BIRT 差不多,但不兼容   1.只能是MyEclipse Web projects 或者 Report Web project不支持B ...

随机推荐

  1. 空间数据库中ST_开头的来由

    1. 引言 在使用空间数据库(如,PostGIS)时,我们经常使用的空间函数(如,ST_Distance(geometry, geometry).ST_Area(geometry)等)都是以ST_开头 ...

  2. Matplotlib 网格线

    我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线. grid() 方法语法格式如下: matplotlib.pyplot.grid(b=None, which='major', ...

  3. 最全面 think php 实现微信公众号回复编号进行投票,自定义菜单功能

    前期准备工作 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messag ...

  4. 判断PC端与移动端跳转

    var mobile_bs = {   versions: function () {     var u = navigator.userAgent;     return {       trid ...

  5. 你可能不知道的HTML小技巧 面试题小技巧

    程序员面试题库分享 1.前端面试题库 (面试必备)            推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全      推荐:★★★★★ 地址:前端技术导航大全 3.开发者颜色 ...

  6. 快速替换jar包class文件的方法

    stetp1:jar -tvf *.jar | grep *.class 查找jar包中,class文件所在的具体路径stetp2:jar -xvf *.jar */*/*/*.class 当前目录下 ...

  7. 如何实现chrome谷歌浏览器多开(独立环境 独立cookie)、改任务栏图标

    多开谷歌浏览器: 由于各种各样的原因,你可能需要在一个电脑登录某个平台,比如一个电脑登录3个公众号,或者3个知乎等等. 最简单的方案是,直接安装3个不同的浏览器,比如一个谷歌浏览器,一个火狐浏览器,一 ...

  8. [localhost-startStop-1]

    第一次遇到Tomcat在Linux服务器启动卡住的情况,情况很简单,tomcat启动以后卡在INFO: Deploying web application directory ......这句话,具体 ...

  9. Linux 安装jdk教程

    https://www.cnblogs.com/mabiao008/p/12059069.html

  10. Linux 配置共享目录方法

    配置共享目录有三种方法: 第一种:使用Vmware自带的文件共享的功能,进入Vmware,点击虚拟机选项,然后点击"设置",再点击标签"选项"这一项,找到&qu ...