gpt4 book ai didi

javascript - 执行 while 循环 setTimeout

转载 作者:行者123 更新时间:2023-11-29 16:13:05 25 4
gpt4 key购买 nike

我已经阅读了很多关于 setTimeout 的主题,但我仍然无法理解如何在我的循环中实现此功能。我会尽力向您展示我的意思。

function RandomHit(anyArray)
{
var turechange = false;
do{
setTimeout(function(){
var random = Math.floor(Math.random()*2);
if(random===0)
{
turechange = true;
console.log(random);
}
if(random===1)
{
console.log(random);
}
}, 2000);
}while(!turechange);
}

每次循环再次进行时,我都会尝试将代码放慢 2000 毫秒。但这不起作用。

最佳答案

您对 JavaScript 的单线程特性有疑问(至少在这种情况下 - 但也有一些异常(exception))。

您的代码中实际发生的是内部无休止的 while 循环,其中有大量 setTimeout() 函数排队。但由于您的代码实际上从未离开 while 循环,因此不会执行这些回调。

一个解决方案是在 setTimeout() 回调中触发下一个超时函数,如下所示:

function RandomHit(anyArray) {   

var turechange = false;

function timerFct(){
var random = Math.floor(Math.random()*2);
if(random===0)
{
turechange = true;
console.log(random);
}
if(random===1)
{
console.log(random);
}

if( !turechange ) {
setTimeout( timerfct, 2000 );
}
}

timerFct();
}

另一种解决方案是使用 setIntervall()clearIntervall():

function RandomHit(anyArray)
{
function timerFct(){
var random = Math.floor(Math.random()*2);
if(random===0)
{
turechange = true;
console.log(random);
}
if(random===1)
{
console.log(random);
}

if( turechange ) {
clearTimeout( timeoutHandler );
}
}
var turechange = false,
timeoutHandler = setInterval( timerFct, 2000 );
}

关于javascript - 执行 while 循环 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22590280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com