简单的封装,将 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);
}
}

最新文章

  1. cocos2dx旧版本支持arm64修改
  2. Bloomberg SEP 12.x 迁移小记
  3. git操作的各种命令整理
  4. shell中while循环的陷阱
  5. 设计模式,Let's “Go”! (下)
  6. java:凯撒密码及String的应用
  7. 利用JavaScript实现动态显示表格且对应改变按键的value值
  8. 老男孩Python全栈开发(92天全)视频教程 自学笔记01
  9. KafkaConsumer 长时间地在poll(long )方法中阻塞
  10. css一些基础效果
  11. Python之猴子补丁
  12. .net core 之Hangfire任务调度
  13. Flatten Nested List Iterator
  14. GPUImage API文档之GPUImageFramebuffer类
  15. Eclipse初次java开发问题总结-4-Maven使用问题汇总
  16. uboot下的命令使用示例
  17. webpack 性能优化 -- 待续
  18. Python之路,Day2 - Python基础,列表,循环
  19. JS设计模式——5.单体模式(用了这么久,竟全然不知!)
  20. 错误 1 error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use . See online help for details.

热门文章

  1. 基于Ubuntu搭建OpenGL开发环境
  2. K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品 nerdctl
  3. spring boot 3.x 配置spring security
  4. js-解决安卓手机软键盘弹出后,固定定位布局被顶上移问题
  5. undrop-for-innodb
  6. 【python操作Excel的常见方法汇总】 xlrd pandas xlwings
  7. C++实现顺序队列(循环队列)相关操作代码
  8. Day12 面向对象
  9. SDN实验环境安装
  10. Java面向对象之static关键字详解