首页 > 代码库 > js for循环下的定时器setTimeout失效?

js for循环下的定时器setTimeout失效?

  最近做项目 在写js的时候遇到这么一个问题:我需要写一个类似于黑客帝国的效果 页面不断有数据往下展示wKioL1QIjUnw4ox-AAFUw44p4PM345.jpg


于是我想到要定时器的功能 定时(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失效?