这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

解决方案 »

  1.   

    没用njen is not defined
      

  2.   

    var d = new Date();
    while(true){
    var d1 = new Date();
    var i = d1-d;
    if(i >10)break;//10秒后跳出循环
    }
    指定时间内一直执行当前循环   
      

  3.   

    可以肯定这是个没有的功能,就是你能阻塞页面也会卡死。如果你总以其他语言的方式来使用
    JS,那JS一定会很难用。既然使用JS就要按照JS的方式来
      

  4.   

    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>
      

  5.   

    6#的做法其实也只是setTimeout的变形,代码并没有阻塞,本身JS就不支持的事情,根本不可能实现。
    如果你非要实现的话也不是没有可能,可以通过修改JS的执行换进来实现,比如用C++扩展浏览器
    暴露给JS一个sleep函数,这样就可以写出这种代码:
    var a = 1;
    sleep(1);
    alert(a);
    我们的上一个项目他们就写了一个这种函数,但因为没有用所以删掉了。因为浏览器是单线程的
    UI刷新和JS运行都在一个线程内,你把线程sleep了页面也就不刷新了,所以就会出现页面卡死。
    奉劝大家别在这上面浪费时间了,用JS就要用JS的方式来编程
      

  6.   

    settimeout 很好啊。
    死循环,是最笨的方法,浏览器会报,js 执行很耗时,是否终止?
      

  7.   

    都2年了,大家还在纠结,我后来用python花了半天的时间完成了我要的东西。
    总结,用工具要用它的长处啊!!!