簡體   English   中英

javascript在執行下一次代碼之前等待

[英]javascript wait before executing next time of code

我有這個代碼我在firebug中運行

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

我想要做的是,在每次迭代中,它將輸出第一條消息,等待10秒然后輸出第二條消息,然后再進行下一次迭代

然而,當我運行它時,它輸出的第一條消息在它輸出的第二條消息之前輸出了3次,我想知道如何在執行下一行代碼之前修復我的代碼等待,在這種情況下,繼續進行下一次迭代

這里的問題是循環體在運行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);
})();

當你調用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);

您總是可以編寫簡單耗時的功能來幫助您完成任務

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

並且當你想要“停止”代碼一段時間時調用它

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)+']');
}

在控制台日志中你會看到這樣的東西 在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM