【问题标题】:is there a way to make an infinite while loop run in the background?有没有办法让无限循环在后台运行?
【发布时间】:2020-11-08 21:49:55
【问题描述】:

当用户单击按钮时,我希望一个功能不断发生,直到用户再次按下该按钮。 我尝试创建一个类似于下面的函数,但我陷入了无限循环,程序无法接受第二次用户点击,因此它可以关闭该功能并重置所做的更改。

function doThing(){
    setBtnValue = "OFF"
    if( setBtnValue !== "ON"){
        setBtnValue = "ON"
        while (setBtnValue="ON"){
            //do this indefinitely
        }
    }
        //perform this on second button click
    if (setBtnValue !== "OFF"){
        setBtnValue = "OFF"
        // call function that will reset changes made to the element
    }
}

【问题讨论】:

  • while(setBtnValue == "ON")
  • 你想无限期地做的“这个”是什么?几乎可以肯定有更好的方法。
  • “我希望一个函数无限地发生,直到用户再次按下该按钮。”这在像浏览器这样的“单线程”环境中是不好的方法。 meta.stackexchange.com/questions/66377/what-is-the-xy-problem
  • 你看,我有一个包含正方形的网格。我有一个函数可以在调用时绘制正方形随机颜色,现在我希望该函数在按下按钮时无限运行,然后在再次按下所述按钮时停止!这是我的小提琴(它在第 126 行有一个错误,因为它无法在第二个 if 语句中访问按钮值:jsfiddle.net/gkoyuptc/4
  • 好吧,你需要给浏览器时间来渲染你对方形颜色的更改,所以你的“紧密”循环无论如何都会冻结它。考虑使用requestAnimationFrame,测试方块是否应该改变,然后再改变它们。

标签: javascript while-loop infinite-loop


【解决方案1】:

包装您的函数/代码以检查 while 循环内是否有按钮单击。您还应该使用 setTimeout() 方法来短暂延迟循环,这样您就不会在不到一秒的时间内完成 100 次循环,因为这会导致浏览器冻结并导致调试器崩溃。

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2019-02-11
    • 2011-07-22
    • 2018-07-30
    相关资源
    最近更新 更多