0

有没有办法使用 javascript 或 jquery 检查函数是否已完成其操作?

我正在尝试使用 setTimeout 制作一个随着数字变大而减慢的计数器(如果你愿意,可以减慢输出)。如您所知,数字越大,延迟时间越长(在 setTimeout 中)。

我要做的是单击一个按钮,然后在屏幕上打印当前循环迭代。此循环数用作 setTimeout 延迟,因此当数字较低时,它会迅速冲过,随着它变大延迟较大,因此使其打印数字更慢(因为此数字是延迟,延迟越大它打印的频率越低)。

Here is the logic I'm trying to accomplish
1. Click button
2. Initiate loop
3. trigger function to set timeout
4. set timeout triggers a function to print the loop iteration #
5. Repeat step 3 until the number of set iterations is completed

好吧,正如您所看到的,当设置超时时,循环将继续,但会有超时延迟。有什么办法可以放置一个暂停类型的函数,等待超时函数完成,然后继续下一次迭代?

这是我的代码

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
</head>

<body>
<form>
<input type="button" value="Display alert box"
onclick="setMessage()" />

<script>

 function setMessage(){
 for(i=0;i<5000;i++){
 var b = i;
 timeMsg();
//some sort of puase here checking until timeMsg & docWrite are completed, then continue to the next iteration
    }
}

function timeMsg(){
var t=setTimeout("docWrite()",b);
}   


function docWrite(){
document.write(i);
}
</script>
</form>
</body>
</html>
4

1 回答 1

2

我建议不要在 for 循环中执行此操作,而是执行以下操作:

function docWrite(i){
    document.write(i);
}

function timeMsg(counter) {
  var t;

  counter++;
  if (counter < 5000) {
    t = setTimeout(function(counter){ 
      docWrite(counter);
      timeMsg(counter);
    }, counter, counter)    
  }
}

timeMsg(0);
于 2012-05-04T19:03:22.960 回答