首页 > 代码库 > js for循环下的定时器setTimeout失效?
js for循环下的定时器setTimeout失效?
最近做项目 在写js的时候遇到这么一个问题:我需要写一个类似于黑客帝国的效果 页面不断有数据往下展示
于是我想到要定时器的功能 定时(500毫秒)在页面上 一行行 显示出数据 但是 同时我后台还需要取其他数据(不是一次性取出的)于是想使用 外层嵌套一个for循环 让js 将第一次取出的数据定时展示结束后 再取第二段数据 结果 发现 js不支持这种 for循环下 使用定时器的功能
for(var i=1;i<10;i++) { setTimeout("alert(‘i="+i+"‘)",100); alert(i) }
这段js不会按照顺序 定时执行 而是会先处理下面的下面的alert() 在js里面 会在100毫秒之前 先给你吧for先执行结束 再执行setTimeout 而且由于线程问题javascript没法实现php的那个sleep功能(暂停几秒后执行)很多人尝试过 写一个js的sleep的功能 但是都没有如愿 于是有人想出了某些不按常理出牌的方法:
方法一:设置一个函数 让浏览器使劲执行 计算个几万次 几十万次 浏览器假死 看起来 就跟暂停了一样
方法二:执行定时的地方 读取当时时间 然后对时间操作 执行时间减去 读取时间 如果正好等于延迟时间 就执行
这两种方法都有很大问题:当时数据很少的时候 方法二可以实现 但是 当数据比较大的时候 方法一 方法二都会造成浏览器直接卡死了
至于这个问题怎么处理 还是需要仔细研究下数据和流程 尽量在一个定时器中完成就可以啦! 方法总比问题多嘛!
本文出自 “甲午笔记” 博客,请务必保留此出处http://jiawu.blog.51cto.com/9349234/1548959
js for循环下的定时器setTimeout失效?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。