在while循环中使用JS setTimeout

时间:2015-09-04 15:42:17

标签: javascript

由于setTimeout在while循环中崩溃。

我不知道是否有办法做到这一点,但我想做一个。 这就是它到目前为止的样子。

<script>
var send = true;
function sendit()
{
    alert("test");
    return true;
}
while(true)
{
    if(send == true)
    {
        send = false;
        setTimeout(function(){
            if(sendit() == true) {
                send = true;
            }
        }, 5000);
    }
}
</script>

这样可能吗?

2 个答案:

答案 0 :(得分:2)

您尚未解释您希望代码执行的操作。如果你想让它每隔5秒发出一次“测试”警报,那么你需要这个:

<script>
function sendit()
{
    alert("test");
    // Call sendit() the next time, repeating
    setTimeout(sendit, 5000);
}
// Call sendit() the first time
setTimeout(sendit, 5000);
</script>

不需要循环,只需让函数再次安排自己。

答案 1 :(得分:0)

我的理解是,您尝试做的事情相当于Java或C#等语言中的Thread.sleep(5000)。 JavaScript中不存在该功能。如果你想在你的函数执行后花一些时间做一些事情,把它放在一个超时时间,但不管怎样,第一个函数仍然会在同一帧中完成,除非你正在执行一个大量的工作。

目前,您的代码在sendit()之前设置超时,在返回之前几乎无限次。由于JavaScript是单线程的,即使经过了20秒,它仍然无法完成您的功能,无法开始查找它需要处理的超时。你应该做的就是让超时内部设置另一个超时,并删除封闭的while(true)。这可能允许无限的,周期性的行为,因为我认为你正在寻找。