-1

我是 Java 的JavaScript新手,我正在尝试实现一个sleep(millis)函数。基本上我需要向端点发出请求,如果它返回错误,请稍等片刻,然后再次发出请求......

我找到了 JavaScript 的setTimeout()函数,但它有一个奇怪的(对我来说)行为,因为代码似乎仍在运行,我不想做任何事情,只能等待......

经过一番研究,我在这里找到了这个功能:

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

使用此功能,我可以完全实现我想要的,但我知道这可能不是正确的方法,而且我没有找到任何其他类似的解决方案......所以,我想知道,在你看来,这是:

  • 一个完全有效的解决方案?
  • 一个不错的解决方法?
  • 只是眼睛疼吗?
4

4 回答 4

1

好吧,意见会有所不同。不过我可以理解,JavaScript 没有真正的睡眠功能,如 Java 或任何其他语言(如 Perl、Bash、PHP 等)

http://devcheater.com/显示了多种变体,但也可以查看这些 Stackoverflow 主题:

sleep() 的 JavaScript 版本是什么? 实现睡眠功能 JavaScript 的最佳方法是什么? 如何在 JavaScript 中实现真正的 sleep()?

于 2013-05-08T12:02:09.027 回答
1

这段代码的问题是一直忙到代码完成。这可能会导致许多浏览器中出现警告对话框,并且还会减慢页面速度。

对话框

在这里,我仍然更喜欢使用该setTimeout功能。语法很简单:

setTimeout("codeToBeExecuted()", milliseconds);

您可以通过在函数中休眠后保存代码并在全局变量中传递所需的数据或像这样来简化它:

setTimeout('whenDone(' + numericData + ', "' + stringData + '")', milliseconds);

JSFiddle

于 2013-05-08T12:02:16.103 回答
1

Javascript中没有sleep函数,你应该考虑使用window.setTimeout来调用下一个操作。我当然不会循环烧掉循环for。但是,如果您必须将其包装在一个名为的函数中,sleep那么这里有一个示例可以给您一个想法。

function sleep(callBack, milliSecs) {
    setTimeout(callBack, milliSecs);
}


function first() {
    console.log("first");
}

function second() {
    console.log("second");
}

first();
sleep(second, 5000);

jsfiddle 上

于 2013-05-08T12:06:24.700 回答
1

你说你不喜欢setTimeout,但基本上,这就是你需要做的。

function myFunc() {
    // Do the work
    setTimeout(myFunc, sleepInterval);
}

(假设您正在尝试创建重复计划,如果没有,请调用您的其他函数而不是myFunc再次)。

您当然也可以(并且可能应该)添加一些终止逻辑。

然后开始你的工作myFunc()。您也可以使用setInterval,但如果您的间隔开始重叠,它可能会导致一些问题。

关于您的解决方案,我选择选项 3...

于 2013-05-08T12:04:29.317 回答