JavaScript:在循环之前等待n秒

时间:2015-11-20 18:43:01

标签: javascript jquery

我在JS中有这个while循环。它试图做一些事情,如果它不起作用,我希望它计算等待然后重新循环所需的时间。

while (makeSomething() == false) {
    var wait = a + b + c;
    sleep(wait);
}

我只知道setTimeout(),但你可能知道它的行为不像我想要的那样。

如果jQuery为它提供了解决方案,那也没关系。

2 个答案:

答案 0 :(得分:3)

您将不得不改变逻辑的工作方式。可能意味着您需要分解代码。你想做什么的基本想法:

function waitForIt(){
   if(makeSomething() == false) {
        var wait = a + b + c;
        window.setTimeout(waitForIt, wait);
   } else {
       console.log("do next step");
   }
}
waitForIt();

答案 1 :(得分:0)

这取决于你的意图。从您的问题来看,似乎您希望保持while循环直到makeSomething()为真。 epascarello的答案将继续执行线程,因为它使用setTimeout()。

从技术上讲,他的答案明显更好,因为它不会挂起应用程序。但是如果你真的想要一个停止所有应用程序处理的睡眠功能,你可以使用这个功能:

    function sleepFor( sleepDuration ) {
        var now = new Date().getTime();
        while(new Date().getTime() < now + sleepDuration){ /* do nothing */ } 
    }

请注意,这通常是不好的做法,当线程处于睡眠状态时,用户将无法与您的应用程序进行交互。

聚集于:What is the JavaScript version of sleep()?