有关JS sleep/wait功能,setTimeout()功能失效问题

opencart-cn 2010-07-22 09:37:03
这2天折腾半天,在JS里面setTimeout() 根本不能像sleep那样做到进程等待,他还是先执行下一步,这个功能不知道以前设计出来做什么的,害死了好多开发者,JS的功能确实不行,最近我也转python开发了,不过给想用这个函数功能,苦苦搜索的人一个交待:下面段代码可以实现sleep功能

function sleep(millis){var njf1 = njen(this,arguments,"millis");nj:while(1) {try{switch(njf1.cp) { case 0:njf1._notifier=NjsRuntime.createNotifier();setTimeout(njf1._notifier,njf1._millis);njf1.cp = 1;njf1._notifier.wait(njf1);return;case 1:break nj; }} catch(ex) { if(!njf1.except(ex,1)) return; }} njf1.pf();}


很乱,很有用:)

www.chnva.com
...全文
2878 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
opencart-cn 2012-08-01
  • 打赏
  • 举报
回复
都2年了,大家还在纠结,我后来用python花了半天的时间完成了我要的东西。
总结,用工具要用它的长处啊!!!
hch126163 2012-07-17
  • 打赏
  • 举报
回复
settimeout 很好啊。
死循环,是最笨的方法,浏览器会报,js 执行很耗时,是否终止?
  • 打赏
  • 举报
回复
6#的做法其实也只是setTimeout的变形,代码并没有阻塞,本身JS就不支持的事情,根本不可能实现。
如果你非要实现的话也不是没有可能,可以通过修改JS的执行换进来实现,比如用C++扩展浏览器
暴露给JS一个sleep函数,这样就可以写出这种代码:
var a = 1;
sleep(1);
alert(a);
我们的上一个项目他们就写了一个这种函数,但因为没有用所以删掉了。因为浏览器是单线程的
UI刷新和JS运行都在一个线程内,你把线程sleep了页面也就不刷新了,所以就会出现页面卡死。
奉劝大家别在这上面浪费时间了,用JS就要用JS的方式来编程
86y 2012-07-17
  • 打赏
  • 举报
回复
js sleep
javascript模拟sleep

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>javascript模拟sleep http://www.ok22.org幸凡在线学习,网页设计,技术交流区,在线学习网,免费视频教程</title>
</head>
<body>
<script>
function Pause(obj,iMinSecond){
if (window.eventList==null) window.eventList=new Array();
var ind=-1;
for (var i=0;i<window.eventList.length;i++){
if (window.eventList[i]==null) {
window.eventList[i]=obj;
ind=i;
break;
}
}
if (ind==-1){
ind=window.eventList.length;
window.eventList[ind]=obj;
}
setTimeout("GoOn(" + ind + ")",iMinSecond);
}

//js继续函数
function GoOn(ind){
var obj=window.eventList[ind];
window.eventList[ind]=null;
if (obj.NextStep) obj.NextStep();
else obj();
}
function testJsStop(){ //调用方法。。百试百爽
alert("1");
Pause(this,2000);//2秒钟扣执行nextstep事件。。这样就可以设置下一个方法执行的开始时间
this.NextStep=function(){
alert("2");
}
}
testJsStop();
</script>
</body>
</html>
  • 打赏
  • 举报
回复
可以肯定这是个没有的功能,就是你能阻塞页面也会卡死。如果你总以其他语言的方式来使用
JS,那JS一定会很难用。既然使用JS就要按照JS的方式来
静缘 2012-07-16
  • 打赏
  • 举报
回复
var d = new Date();
while(true){
var d1 = new Date();
var i = d1-d;
if(i >10)break;//10秒后跳出循环
}
指定时间内一直执行当前循环
x1aoweiliang 2012-07-16
  • 打赏
  • 举报
回复
没用njen is not defined
hoojo 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 scsunboy 的回复:]
这2天折腾半天,在JS里面setTimeout() 根本不能像sleep那样做到进程等待,他还是先执行下一步,这个功能不知道以前设计出来做什么的,害死了好多开发者,JS的功能确实不行,最近我也转python开发了,不过给想用这个函数功能,苦苦搜索的人一个交待:下面段代码可以实现sleep功能

function sleep(millis){var njf1 = njen(this,argume……
[/Quote]
js sleep 顶~~
s_liangchao1s 2010-07-22
  • 打赏
  • 举报
回复
...勇敢的帖子

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧