javascript在执行下一次代码之前等待

时间:2014-01-06 01:20:32

标签: javascript firebug

我有这个代码我在firebug中运行

for(var i = 0; i < 3; i = i+1) 
{
    console.log("hi "+i);
    setTimeout(function()
    {
        console.log("hi again "+i);
    }, 10000); 
}

我想要做的是,在每次迭代中,它将输出第一条消息,等待10秒,然后输出第二条消息,然后再进行下一次迭代

然而,当我运行它时,它输出的第一条消息在它输出的第二条消息之前输出了3次,我想知道如何在执行下一行代码之前修复我的代码等待,在这种情况下,继续下一次迭代

3 个答案:

答案 0 :(得分:2)

这里的问题是循环体在运行setTimeout的任何回调之前运行完成。因此,它将在任何“hi again”消息之前打印所有“hi”消息。为了解决这个问题,您需要安排“hi”消息在“hi again”运行之后运行。例如

(function() { 
  var go = function(count) { 
    console.log("hi " + count);
    setTimeout(function() { 
      console.log("hi again " + count);
      if (count < 3) { 
        go(count + 1);
      }, 10000);
  };

  go(0);
})();

答案 1 :(得分:1)

当你调用setTimeout时,它会说“继续做你正在做的事情,但是在X毫秒内也这样做。所以你需要做类似的事情:

function sayHi(i) {
    console.log("hi "+i);
    setTimeout(function()
    {
        console.log("hi again "+i);
        if (i < 3) sayHi(i+1);
    }, 10000);
}

sayHi(0);

答案 2 :(得分:0)

您总是可以编写简单耗时的功能来帮助您完成任务

function pauseScript(seconds) {
  var stop = Date.now() + seconds*1000;
  for (var i; stop >= Date.now(); i++){}
}

并在您想要&#34;停止&#34;你的代码已经有一段时间了

for (var i=1; i<=10; i++) {
  pauseScript(10) // pause 10 seconds
  var d = new Date();
  console.log("pass #"+i+" [time now = "+d.toTimeString().substr(0,8)+']');
}
在控制台日志中

你会看到类似的东西 enter image description here