setTimeout未等待指定时间
setTimeout not waiting specified time
我的setTimeout语句正在立即进行函数调用,而不是等待我指定的时间,我不知道为什么。for循环需要10秒,然后将布尔值从T更改为F需要110秒。
for(var c = 0; c < 10; c++)
{
setTimeout(function()
{
gold = gold + clickerPower;
$("#totalGold").html("Gold: " + gold);
console.log("Clicked!");
}, 1000);
}
setTimeout(function(){frenzyActive = false;}, 110000);
启动超时是一个异步操作。setTimeout
接受一个函数作为它的第一个参数,因为它正在注册该回调函数以便稍后调用。JavaScript事件循环的每一次迭代都会检查是否已经过了适当的时间,如果已经过了,则会触发注册的回调。与此同时,它仍在等待运行其他代码。
你的for循环没有在等待任何东西。它以极快的速度迭代到10,您所做的就是在一秒内注册10个回调以同时触发所有回调(顺便说一句,时间是以毫秒为单位指定的,所以1000=1秒)。
你需要setInterval
。
var count = 0;
var intervalId = setInterval(function () {
gold = gold + clickerPower;
$('#totalGold').html('Gold: ' + gold);
console.log('Clicked!');
count++;
if (count === 10) {
clearInterval(intervalId);
frenzyActive = false;
}
}, 1000);
该函数将每秒运行一次,每次递增一个count
变量。当它达到10时,我们调用clearInterval
并给它从setInterval
返回的intervalId
。这将停止间隔的继续。
看看我在对异步回调感到困惑时写的这篇文章:)
http://codetunnel.io/what-are-callbacks-and-promises/
我希望这有帮助:)
祝你好运!
执行循环不需要10秒。Look将立即执行,匿名函数将在1秒后被enqueued
执行10次。
对setTimeout
的最后一次调用将导致匿名函数在110秒后执行。
为了确保循环中的匿名函数按顺序调用10次,每次间隔1秒,请执行以下操作:
var c = 0;
setTimeout(function() {
if(c < 10) {
gold = gold + clickPower;
console.log("Clicked");
c++;
setTimeout(arguments.callee, 1000);
//^^ Schedule yourself to be called after 1 second
}
}, 1000);
我今天确实遇到了这个挑战,@Guarav Vaish提供的答案让我走上了成功的道路。在我的例子中,我使用的是ES6语法,值得注意的是arguments.callee
已被弃用。然而,以下是我如何编写与Vaish提供的解决方案相同的解决方案:
var c = 0;
setTimeout(function named() {
if(c < 10) {
gold = gold + clickPower;
console.log("Clicked");
c++;
setTimeout( ()=>{ named() }, 1000);
//^^ Schedule yourself to be called after 1 second
}
}, 1000);
注意:我只是使用一个命名函数来代替原始解决方案中的匿名函数。非常感谢。这真的很有帮助
- 单击按钮以等待单击按钮
- React组件等待所需道具进行渲染
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 正在等待呈现图表,直到加载数据为止
- 在等待ajax请求时显示微调器并禁用页面
- Javascript在for循环中等待处理请求
- JavaScript循环并等待函数
- 在等待异步任务时永久循环
- 在通过child.print()打印之前,我如何等待图像加载到我的新窗口中
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 等待300毫秒,然后使用jQuery向下滑动菜单
- 定时Ajax进程在用户离开页面后继续
- 将菜单项与滚动绑定时出现Jquery错误
- 定时循环,使用Javascript在2个循环之间间隔x秒
- 等待循环调用的所有承诺完成
- 定时循环,间隔10秒
- 等待回调函数执行
- RxJS等待承诺解决
- WIll window.addEventListener(“加载”,function(),false);等待浏览器自动填
- 如何在php/javascript中制作定时器和警报