简单的封装,将 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. 分析总结一下所有有关打印题目的套路和思路:pat乙级:1109 擅长C, 1008元素循环右移,1050 螺旋矩阵,1027 打印沙漏等等

    分析: 首先你要明白第一件事:所有要打印东西的题目打印都是从第一行到最后一行,从第一列到最后一列,你是没办法跳着打印的.可以看看其他几个打印题目1008元素循环右移,1050 螺旋矩阵1027 打印沙 ...

  2. C语言多维数组的实现与操作

    常量和所需的头文件 #include<stdio.h> #include<stdarg.h> #include<stdlib.h> #define MAX_ARRA ...

  3. Xilinx XPM使用说明--XPM_MEMORY_SDPRAM

    XPM_MEMORY_SDPRAM 参数化宏:简单的双端口RAM 介绍 此宏用于实例化简单双端口RAM.端口A用于从存储器执行写入操作,端口B可用于从存储器读取. 下面介绍XPM_MEMORY实例的基 ...

  4. mysql查询重复的数据

    ---查询重复的数据 . UUID可以换成其他的需要去重的字段. 点击查看代码 select * FROM t_gzmx_reptile_receive_incre WHERE id NOT IN ( ...

  5. rust vec排序

    一.sort let mut v = vec![4,3,3,1,2]; println!("{:#?}",v); v.sort(); println!("{:#?}&qu ...

  6. Eureka服务治理

    Eureka是由Netflix开发的一款服务治理开源框架,Spring-cloud对其进行了集成.Eureka既包含了服务端也包含了客户端,Eureka服务端是一个服务注册中心(Eureka Serv ...

  7. golang 中mgo update报错: The dollar ($) prefixed field '$inc' in '$inc' is not valid for storage.

    _, err := c.Find(bson.M{"index": index}).Apply(mgo.Change{ Upsert: true, ReturnNew: false, ...

  8. Python爬取亚马逊商品页面

    仍然利用Requests库来实现 1 import requests 2 r=requests.get('https://www.amazon.cn/gp/product/B01M8L5Z3Y') 3 ...

  9. Java面向对象之抽象类abstract

    抽象类abstract 普通类 普通类可以直接产生实例化对象,并且在普通类之中可以包含有构造方法,普通方法.static 方法.常量.变量的内容. 所有的普通方法都会有一个"{}" ...

  10. CSS实现开门效果

    .door{ position: relative; width: 450px; height: 300px; border: 1px solid #000; margin: 100px auto; ...