简单的封装,将 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. 开源项目推荐:3D点云处理软件CloudCompare,

    3D point cloud and mesh processing software,Open Source Project,Based on Qt5. CloudCompare是一款基于GPL开源 ...

  2. H5与原生APP调了交互方式

    APP中不支持position:fixed; 改成 position:absolute; 触发H5按钮跳转APP原生页,进入调取APP的名传自己的方法 <a href="javascr ...

  3. 在线设计器 DesignO 的分析

    需求分析 现有POD网站的在线编辑器不是很好用. 可配置性不强,素材无法在后台实现管理 可扩展性不强,无法应用于多个行业,比如包装.服装 产品分析 官方网站:https://www.designnbu ...

  4. Oracle 11g 单机服务器ASM部署

    Oracle oracle,相比都有所了解,是一家企业级的数据库公司(收费),上图是oracle官网,也是对外的服务平台 oracle有自己独特的安装方式:ASM   :  自动存储管理(ASM,Au ...

  5. C语言学习--动态内存分配(未完待续)

    内存分配的类型: 在C/C++中内存分为5个区,分别为栈区.堆区.全局/静态存储区.常量存储区.代码区. 静态内存分配:编译时分配.包括:全局.静态全局.静态局部三种变量. 动态内存分配:运行时分配. ...

  6. QT个人笔记

    1.QT的setCursor(Qt::CrossCursor) 干什么用 ui->View->setCursor(Qt::CrossCursor); setCursor函数用于设置窗口上的 ...

  7. BOOK01:《过目不忘的读书法》

    BOOK01:<过目不忘的读书法> 01 区分"信息"和"知识" 一年之后过时的是"信息",十年也不过时的是"知识&q ...

  8. Unable to preventDefault inside passive event listener invocation.

    问题:如图所示 Unable to preventDefault inside passive event listener invocation. 解决方案: 应用 CSS 属性 touch-act ...

  9. Python 闭包,生成式,推导式

    闭包概念 闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函数类似, 不同之处在于,闭包中外部函数返回的不是一个具体的值,而是一个函数.一般情况下,返回的函数会赋值给一个变量,这个变量可以在后面被继 ...

  10. python获取某一年的所有节假日

    注:chinese_calander库需要每年手动更新一次 import datetime import chinese_calendar def get_holidays(year=None, in ...