【问题标题】:Check if function can be called: Javascript检查是否可以调用函数:Javascript
【发布时间】:2015-07-14 17:50:01
【问题描述】:

我正在尝试编写一个持续调用 doSomething() 的 Javascript 函数,只要 some_condition 为真。如果 some_condition 变为 false,它应该在五秒后检查 some_condition 是否再次变为 true,如果不是,则在屏幕上显示错误消息。

我目前已经编写了这么多的函数,但我对我是否正确执行此操作感到困惑。感谢您的帮助。

while (some_condition) {
  doSomething();
  else {
    ???
}

【问题讨论】:

    标签: javascript function loops timer


    【解决方案1】:

    不,您不应该使用while 循环。 JavaScript 是单线程的,如果您有一个永远不会返回的 while 循环,浏览器(或您选择的 JavaScript 环境)将变得无响应。

    你需要使用setTimeout来调度函数。

    function enqueueSomething() {
      if (some_condition)
        doSomething();
        // Enqueue ourselves to run again without blocking the thread of execution
        setTimeout(enqueueSomething);
      else
        // Wait 5 seconds, then try again
        setTimeout(enqueueSomething, 5000);
    }
    

    您需要保持一些状态,表明您之前是否等待了 5 秒,并添加错误警报代码。

    【讨论】:

    • 您能解释一下什么情况下不应该在 JavaScript 中使用 while 循环吗?是否只是当while循环内的代码可能需要很长时间才能执行?
    • @codersun3 就是这样。如果您的while 循环运行时间超过几分之一秒,整个浏览器将变得无响应。
    • 谢谢。有没有办法改变代码,如果 some_condition 为假,它只在五秒后检查一次 some_condition 是否为真?它不应该在 10、15、20 等秒后继续检查 some_condition 是否为真。
    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 2021-06-26
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多