Javascript秒表不工作

Javascript秒表不工作,javascript,Javascript,我有一个秒表,它必须调用setInterval并每毫秒增加一个变量,以便在调用Stop()时获得ElapsedTime。 我将使用它来测量请求所需的时间,但为了简单起见,我刚刚添加了一个sleep函数 function sleep(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7; i++) { if ((new Date().getTime() - start) >

我有一个秒表,它必须调用setInterval并每毫秒增加一个变量,以便在调用Stop()时获得ElapsedTime。 我将使用它来测量请求所需的时间,但为了简单起见,我刚刚添加了一个sleep函数

   function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}


var Stopwatch = 
{
    ElapsedTime: 0,
    CounterId :0, 

    IncrementElapsedTime:function(){
            this.ElapsedTime++;
            console.log("incremented to: " + this.ElapsedTime);    
    },

    Start: function(){
        this.CounterId = setInterval(this.IncrementElapsedTime(), 1);
    },


    Stop: function(){
        clearInterval(this.CounterId);
    }
}

Stopwatch.Start();

sleep(500);

Stopwatch.Stop();
console.log("final result: " + Stopwatch.ElapsedTime);
函数睡眠(毫秒){
var start=new Date().getTime();
对于(变量i=0;i<1e7;i++){
如果((新日期().getTime()-start)>毫秒){
打破
}
}
}
var秒表=
{
ElapsedTime:0,
计数器ID:0,
IncrementElapsedTime:函数(){
这个.ElapsedTime++;
console.log(“增加到:“+this.ElapsedTime”);
},
开始:函数(){
this.CounterId=setInterval(this.IncrementElapsedTime(),1);
},
停止:函数(){
clearInterval(这个计数器ID);
}
}
秒表。开始();
睡眠(500);
秒表;
console.log(“最终结果:+Stopwatch.ElapsedTime”);
我预计由于我等待了500毫秒,调用Stop后的ElapsedTime正好是500毫秒。但是ElapsedTime只显示1而不是500。我做错了什么?谢谢

--


解释-在阅读了这些评论之后,我明白了我的意图是简单而不清楚的-我想要的只是得到一个从间隔开始到清除之间经过的时间,以毫秒为单位。有人能告诉我正确的方向吗?这段代码不是最好的方法,谢谢,这是因为JavaScript只是顺序单线程的,而不是多线程的。这意味着当繁忙循环
sleep()
运行时,不能有任何来自
setInterval
的调用,这导致在调用
.Stop()
之前只调用它一次


只要经过的时间没有被繁忙的循环或阻塞执行(如提示)停止,您就会从
.Stop()

中得到一个正确的值。在开始内,您不能在
setInterval
中引用
。这需要一个全局引用,因为它执行时与触发
setInterval
的对象分离。第二点是脚本执行器忙于执行
sleep()
,忘记了执行您想要执行的内容。此外,
setInterval
不应用于精确应用。下面的代码只计算到我的浏览器上的
2646
,即使我要求在
10000ms
之后停止计时器:

   var Stopwatch = 
    {
        ElapsedTime: 0,
        CounterId :0,
        IncrementElapsedTime:function(){
                this.ElapsedTime++;
                console.log("incremented to: " + this.ElapsedTime);    
        },

        Start: function(){
            this.CounterId = setInterval(function(){Stopwatch.IncrementElapsedTime();}, 1);
        },


        Stop: function(){
            clearInterval(this.CounterId);
        }
    }

    Stopwatch.Start();
    setTimeout(function() {
        Stopwatch.Stop();
        console.log("final result: " + Stopwatch.ElapsedTime);
    }, 10000);

那么你的确切问题是什么?为什么
500
完全错了?我的意思是你在开始和停止之间等待500毫秒。。。你还可以举个例子。你得到了什么结果?@bgse在代码下面写着我的问题isI更好地解释了问题所在@SpencerWieczorek@Amc_rtty只要请求没有阻塞或忙循环,就可以。