JavaScript setTimeout循环不';t折断或似乎握住它';谁拥有全局变量的副本?
在过去的5个小时里,我一直在调试、测试并试图找出问题所在,我没有更多的选择 似乎我的setTimeout循环保存了它自己的全局变量副本 以下是一个函数:JavaScript setTimeout循环不';t折断或似乎握住它';谁拥有全局变量的副本?,javascript,Javascript,在过去的5个小时里,我一直在调试、测试并试图找出问题所在,我没有更多的选择 似乎我的setTimeout循环保存了它自己的全局变量副本 以下是一个函数: function playLights(){ if(bombPlanted == true){ console.log("bombPlanted: "+bombPlanted); if(elapsed < repeats){ setTimeout(playLights, 1
function playLights(){
if(bombPlanted == true){
console.log("bombPlanted: "+bombPlanted);
if(elapsed < repeats){
setTimeout(playLights, 1000);
}
else{
bombPlanted = false;
}
elapsed++;
}
}
这就是行动开始的地方:
if(roundInfo.added.round.bomb){
initVars();
playLights();
}
这就是应该将bombPlanted设置为false的地方,也是我假设的-中断setTimeout循环:
if(roundInfo.round.phase == "freezetime"){
bombPlanted = false;
console.log("setting bomb to false");
}
这是Node.js的输出:
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
Handling POST request... [This is where new round starts]
setting bomb to false
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
当炸弹工厂完全完成并爆炸时-一切都重置正常,但如果炸弹工厂由于回合结束速度加快而未能爆炸-它将继续滴答作响并启动setTimeout
正如您所看到的:在冻结时间阶段,它会被调用,并且确实会将bombPlanted设置为false,但旧的循环一直在滴答作响
我的循环是否保留它自己的bombPlanted变量副本,并在所有脚本完成之前拒绝更新它
编辑:
我刚意识到这很可能与反应有关
if(roundInfo.added.round.bomb){
initVars();
playLights();
}
及
包装在:
if (req.method == 'POST') {
console.log("Handling POST request...");
res.writeHead(200, {'Content-Type': 'text/html'});
var body = '';
req.on('data', function (data) {
body += data
});
req.on('end', function () {
[此处]
res.end( '' );
});
}
请阅读并提供一个可运行的示例。@FelixKling我认为我做不到,这基本上只是一个脚本,它从反恐全球进攻游戏中获取数据,并根据这些数据执行动作(在我的例子中,调整我灯泡的颜色),这如何阻止你提供MCVE?@melpomene哦,我现在明白了,好的,我现在就编辑。谢谢。嗯。。检查代码中两种情况下变量的范围是否相同。我相信,
freezetime
中的一个正在使用一个不同作用域的变量。请阅读并提供一个可运行的示例。@FelixKling我认为我做不到,这基本上只是一个脚本,它从反恐全球进攻游戏中获取数据,并根据这些数据执行操作(在我的例子中,调整我灯泡的颜色)这是如何阻止你提供MCVE的?@melpomene哦,我现在明白了,好的,现在就进行编辑。谢谢。嗯……在你的代码中,检查变量的范围在两种情况下是否相同。我相信冻结时间
中的变量正在使用不同范围的变量
if (req.method == 'POST') {
console.log("Handling POST request...");
res.writeHead(200, {'Content-Type': 'text/html'});
var body = '';
req.on('data', function (data) {
body += data
});
req.on('end', function () {
res.end( '' );
});
}