Javascript setInterval函数未停止
我正在尝试每1000毫秒向集合添加一个对象,当添加了4个对象时,我想清除间隔并停止函数,但我遇到了问题,并且setInterval函数没有停止,因为if检查不在正在更新的代码中。如果lvl1count==4,则仅在调用Level1时进行检查。将支票移动到您的间隔内,它就会起作用。您还需要更改变量名,以便它们不会冲突Javascript setInterval函数未停止,javascript,Javascript,我正在尝试每1000毫秒向集合添加一个对象,当添加了4个对象时,我想清除间隔并停止函数,但我遇到了问题,并且setInterval函数没有停止,因为if检查不在正在更新的代码中。如果lvl1count==4,则仅在调用Level1时进行检查。将支票移动到您的间隔内,它就会起作用。您还需要更改变量名,以便它们不会冲突 Level1(); var lvl1count = 0; function Level1() { var x = setInterval(function () {
Level1();
var lvl1count = 0;
function Level1() {
var x = setInterval(function () {
lvl1count++;
var x = 84 + (Math.random() * (cw - 27));
var y = 84 + (Math.random() * (ch - 27));
Enemies.add(new Enemy(x, y, 1, 90));
}, 1000);
if (lvl1count == 4) {
console.log("finish");
clearInterval(x);return;
}
}
调用Level1函数时,最新的if语句只执行一次。因此,每次调用setInterval内的函数时,都需要检查lvl1count变量的计数器:
注意:@epascarello指出,这需要更改变量名。由于您已经在anonimous函数中使用了x,请使用另一个变量更改setInterval赋值,例如
var x = setInterval(function () {
lvl1count++;
var x = 84 + (Math.random() * (cw - 27));
var y = 84 + (Math.random() * (ch - 27));
Enemies.add(new Enemy(x, y, 1, 90));
if (lvl1count == 4) {
console.log("finish");
clearInterval(x);
return;
}
}, 1000);
及
在您的情况下,您可以使用setTimeout代替setInterval,如下所示
clearInterval(anotherVariable);
反对票的选民愿意解释他的反对票吗?因此,如果有必要,我可以改进我的答案。不是downvoter,但您的代码仍然不会清除间隔。@epascarello那么,为什么该代码在到达4时停止?因为示例中的代码!==上面答案中的代码!这就是为什么它有效的原因。@FabrizioCalderan所以你仍然没有看到你的问题?如果你读了我被否决的答案,你就会知道错误是什么。洛拉:太棒了,谢谢你对正确答案的否决票+1.对于这个答案A-1,没有解释变量冲突是不公平的。或许,一个简单的评论指出问题对OP也会更有帮助,而不是投反对票
var anotherVariable = setInterval(function () {
clearInterval(anotherVariable);
Level1();
var lvl1count = 0;
function Level1() {
setTimeout(function () {
lvl1count++;
//stuff
if(lvl1count++ <= 5) {
Level1();
}
}, 1000);
}