settimeout代替setinterval解决setinterval跳过队列的问题
今天给大家分享一个就是关于setinterval的问题。首先了解setinterval,说白了就是一个定时器setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
setinterval()用法
setInterval(code,millisec[,“lang”])
后面就两个参数code是你的js代码,millisec为时间间隔,以毫秒计,
setTimeout是异步执行的,堆栈中碰到setTimeout会交给浏览器内核处理,等待setTimeout达到触发条件(即设定的时间),再返回给执行队列。简而言之,就是计时的这个操作是在浏览器端进行的,在计时完成后,将settimeout中的操作放入事件队列中。
比如我有以下一个简单的需求,就是从第三方工具爬取数据,然后每隔多少秒进行插入到数据库,这个就用到的以上的setinterval的问题,但是时间间隔太短之后就发现点击事件啥的都失效, 然而这块的原因就是请求的异步问题,具体的就是因为js的单线程的问题,这个不懂的童鞋可以问问度娘去看看,然而数据量一大就是会很吃内存,然后就想到了用settimeout的方法企业代替setinterval的问题。首先大体思路还是就是写一个延时器然后循环递归,下面我就拿我写的实验去简单介绍咋样使用,首先就是我利用apifox工具mock几百条数据,然后将几百条数据进行提交给后台,
h5的代码
<button @click="starthandle">导入到数据库</button>
starthandle(){var time=null;//首先明确思路,就是当延时器递归的时候就是将每一次的数据进行组装成data,可以进行索引操作。//初始化的索引值;var num=0,;//从第一条数据的时候开始插入var max_length=this.data.list;//这块的list就是请求第三方的网站爬取的数据。var that=this;setTimeout(function timer(){that.$http({url:'',//请求的插入的接口method:"",data:{//插入数据库的数据},}).then((data)=>{num++;//这块就是请求不管成功与否,让索引+1,每次请求的时候,插入的数据依次 插入请求的几百条数据的每一条。}).catch(err=>{console.log(err)})if(num === max_length){return;//判断当请求的数据刚好是请求的数据最后一条插完之后不在执行}time = setTimeout(timer,500)
})
}
这样就简单的实现了,但是在比如要写一个停止的按钮的时候,注意一点就是clearTimeout(time)发现没有效果,这时候可以在前面加上一个clearTimeout(time)的问题就ok了
settimeout代替setinterval解决setinterval跳过队列的问题相关推荐
- setInterval和setTimeout的区别以及setInterval越来越快问题的解决方法
setInterval和setTimeout的区别以及setInterval越来越快问题的解决方法 参考文章: (1)setInterval和setTimeout的区别以及setInterval越来越 ...
- JavaScript计时器的用法setTimeout()和setInterval()
Javascript计时器的用法 当我们学习前端的时候定时器是一个重要的知识点,几乎现在的我们打开一个网页中的页面都会看见定时器的身影,京东淘宝的定时秒,轮播图.规定时间的界面跳转- 在JavaScr ...
- 解决setInterval计时器不准的问题
解决setInterval计时器不准的问题 参考文章: (1)解决setInterval计时器不准的问题 (2)https://www.cnblogs.com/flash3d/p/3715600.ht ...
- 解决setInterval函数传参问题
修改window.setInterval函数,使其可以接收参数 var __sto = setInterval; window.setInterval = function (callback, ti ...
- php算法台阶,php如何解决青蛙跳台阶的问题(代码)
本篇文章给大家带来的内容是关于php如何解决青蛙跳台阶的问题(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级 ...
- phpredis 报错 “Function Redis::setTimeout() is deprecated” 解决方法
phpredis 报错 "Function Redis::setTimeout() is deprecated" 解决方法 参考文章: (1)phpredis 报错 "F ...
- django解决页面跳转问题
django解决页面跳转问题 参考文章: (1)django解决页面跳转问题 (2)https://www.cnblogs.com/studong/p/9181524.html 备忘一下.
- 教你解决微信跳转appstore的困扰
微信浏览器是不支持打开App Store 页面的,不知道微信为什么这么做.比如你页面写 <a href="http://itunes.apple.com/us/app/id399608 ...
- jupyter notebook环境配置(重写config文件、配置默认工作文件路径、如何解决需要token登陆的问题/解决无法跳转浏览器问题等)
一.重写config文件 1.输入cmd命令 jupyter notebook --generate-config 2.根据文件生成路径找到generate-config文件 3.双击或者记事本打开j ...
最新文章
- php最常见代码,PHP常见算法合集代码实例
- redis High Availability---Redis Sentinel翻译
- php简单网站源码包含数组_PHP 数组
- 起名算法 php,PHP实现各种经典算法详解
- QT使用html改变字体颜色,QT中设置字体和更改字体颜色
- java js获取css方法_5种JavaScript和CSS交互的方法
- mysql8 修改权限_MySQL8修改重置root密码,远程连接权限设置
- 有关软件工程的问题的分析和讨论及课后的作业3
- 69讲入门python_Python入门,一定要吃透这69个内置函数
- 制作 mysql的rpm文件_自制mysql.rpm安装包
- shell等待特定进程pid退出的方法
- (44)FPGA时序逻辑与组合逻辑(组合逻辑)
- [WinForm]dataGridView导出到EXCEL
- 微信小程序首支视频广告片发布
- 使用daemontools监控zookeeper,storm等进程
- http的响应码200,404,302,500表示的含义分别是?
- 常见的总线通信方式及其特点
- html倒计时面自动跳转,小代码 html 自己网页倒计时跳转
- 向传奇致敬,向约翰·纳什和他的妻子艾丽西亚致敬,缔造了数学和爱的传奇
- 超硬核|手把手教你制作一个示波器
热门文章
- css3八卦,CSS3 八卦图推演漩涡
- 沟通:多技能、学习能力、泛化能力的重要性
- c1 驾考成都龙岗科目三考试经验
- QML类型——Component
- HTML在黑色框中加白色文字,文字一部分黑色一部分白色的效果用css做怎么实现?_html/css_WEB-ITnose...
- setbkcolor
- 神经网络模型的实际案例,神经网络模型数据处理
- 奔驰事件疑宝马紧急预案;巴黎圣母院失火;郑大学生勾连间谍!
- openpnp - 贴片前, 放入一块新板子后, 对板子的坐标矫正
- windows10远程桌面登录ubuntu20.04