使用 setTimeout 来模拟一个 setInterval
setTimeout 超时调用;在多少时间 在执行;
setinterval 每隔多少时间 就调用
例如:
setTimeout这个的值是1000,也就是说在页面刷新后,1000毫秒之后才调用这个函数体内的东西
setTimeout有一个最低的时间限制,400s
setinterval的值是1000的话,就是每过1000毫秒执行一次
1 为什么要模拟 ? 2 然后模拟是解决了什么 ?
3.setinterval 有两个缺点:
1、setInterval无视网络延迟,只要达到时间,就会进行下一次调用。假设我们在请求一个http接口,在上 一次还未返回结果的情况下,继续发起请求,很有可能的结果就是一次性得到多次同样的结果。当http接口都报错的时候,可能同时出现多次错误提示。或者多次页面刷新的状况。
2、假设每100毫秒执行一次,若上次执行只花了5ms,则下次执行会在95ms以后。时间并不准确。
3、即使setInterval调用的方法报错了,他仍然会继续执行。
// 定时间隔执行
const myInterval = function(fn, t) {
const obj = {
timmer: null
};
(function inner() {
fn();
obj.timmer = setTimeout(inner, t);
})();
return obj;
};
// 清空定时执行
const clearMyInterval = function(obj) {
clearTimeout(obj.timmer);
};
// 使用示例
let tt = myInterval(() => {
console.log(1);
}, 1000);
// 清空示例
setTimeout(() => {
clearMyInterval(tt);
}, 3000);
使用 setTimeout 来模拟一个 setInterval的更多相关文章
- window.settimeout用法与window.setInterval用法的区别
setTimeout 和setInterval的功能都是经过某一个时间段后发生某件指定的事件或者方法. window.setTimeout方法是定时程序,也就是在某时间以后干什么, window.se ...
- setInterval和setTimeout的区别以及setInterval越来越快问题的解决方法
setInterval()和setTimeout()方法都是js原生的定时方法,当然它们两个的作用也是不同的,并且最近在做上下滚动公告栏的时候,发现了setInterval()非常令人抓狂的问题,那就 ...
- 自定义模拟一个Spring IOC容器
一.模拟一个IOC容器: 介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书 ...
- 使用LinkedList模拟一个堆栈或者队列数据结构
使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出 如同一个杯子. 队列:先进先出 如同一个水管. import java.util.LinkedList; public cl ...
- scala模拟一个timer
直接上代码: package com.test.scalaw.test.demo import java.util.Date /** * 模拟一个定时timer */ object Timer { d ...
- C# 模拟一个处理消息队列的线程类 Message Queue
// 模拟一个处理消息队列的类 class MessageHandler { // 消息队列 private Queue<string> messageQue = new Queue< ...
- java集合 collection-list-LinkedList 模拟一个堆栈或者队列数据结构。
/* 使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出 如同一个杯子. 队列:先进先出 First in First out FIFO 如同一个水管. */ import jav ...
- jquery用div模拟一个下拉列表框
原文 jquery用div模拟一个下拉列表框 今天分享一个用我自己用jquery写的,用div模拟下拉列表select,这个效果网上有很多,但是写一个有自己思路的代码效果,更有成就感,先看截图: 自我 ...
- Java LinkedList特有方法程序小解 && 使用LinkedList 模拟一个堆栈或者队列数据结构。
package Collection; import java.util.LinkedList; /* LinkedList:特有的方法 addFirst()/addLast(); getFirst( ...
随机推荐
- ios--->NStimer用法
NStimer用法 1.初始化 (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL ...
- python下的selenium和chrome driver的安装
selenium是一款支持多种语言.多种浏览器.多个平台的开源web自动化测试软件,测试人员可用python.java等语言编写自动化脚本,使得浏览器可以完全按照你的指令运行,大大节省了测试人员用鼠标 ...
- java反射API
反射主要对象 Class Constructor Field Method API-Class 获取Class对象 Object.getClass() className.class Class.fo ...
- Serverless 的运行原理与组件架构
本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决 过去一年,我们和大量 Serverless 用户进行了线上和线下的交流,了解大家的业务场景.对 Serverless ...
- LIBCMTD.lib与libcpmtd冲突的解决方法。
error: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int) ...
- [travis-ci]自动集成测试
自动运行测试的平台https://travis-ci.org/ 可以自动导入测试github上的项目 因为yml文件格式错误会导致找不到配置文件, 这里要注意啦, 掉坑里了.... https://d ...
- HDU_1222_GCD
http://acm.hdu.edu.cn/showproblem.php?pid=1222 直接用GCD就可以了,gcd大于1表明每次一周后偏移量为0. #include<iostream&g ...
- Mysql:自动化备份
简介 在这个数据为王的时代,数据的备份十分重要,这里就分享一篇mysql数据库自动备份的脚本(是从网上搜到的),其将配置文件和备份脚本分离,提高了安全性,脚本风格规范严谨,分享给大家希望对需要的小伙伴 ...
- python练习——第2题
原GitHub地址:https://github.com/Yixiaohan/show-me-the-code 题目:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数 ...
- Csp_J2019游记
Day_-14 学校开始停课集训,还好还有上午~~ Day_-7 马上半期考试+\(Csp\),心态已炸,却还要坚持集训 Day_-1 \(Csp\)前夕,打算临时抱抱佛脚,死磕了一下图论(诸如最小生 ...