我在JS中有这个while循环。它试图做一些事情,如果它不起作用,我希望它计算等待然后重新循环所需的时间。
while (makeSomething() == false) {
var wait = a + b + c;
sleep(wait);
}
我只知道setTimeout(),但你可能知道它的行为不像我想要的那样。
如果jQuery为它提供了解决方案,那也没关系。
答案 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 */ }
}
请注意,这通常是不好的做法,当线程处于睡眠状态时,用户将无法与您的应用程序进行交互。