Mar*_*ijn 12 javascript node.js
我在打破setTimeout循环时遇到了一些麻烦.
for (var i = 0; i < 75; i++) {
setTimeout(function(i) {
return function() {
console.log("turn no. " + i);
if(table.game.playerWon) {
console.log('Player won');
// I want to stop the loop now
// i = 75; didn't work
}
};
}(i), 100*i);
}
Run Code Online (Sandbox Code Playgroud)
我读过100个与setTimeout相关的帖子,但是无法想出这个帖子.
编辑:
当我想要完成时,让我澄清一下.
我的游戏有75个转弯,每个转弯需要大约500毫秒,在那个转弯期间我想检查条件是否满足并宣布玩家赢了,在玩家赢了之后没有必要继续剩下的转弯.
Jos*_*ber 19
而不是设置所有这些计时器,创建一个连续计时器setInterval:
var counter = 0;
var timer = setInterval(function () {
console.log("turn no. " + counter);
if (table.game.playerWon) {
console.log('Player won');
}
if (counter >= 75 || table.game.playerWon) {
clearInterval(timer);
}
counter++;
}, 100);
Run Code Online (Sandbox Code Playgroud)
如果您的转弯需要500毫秒,请将最后一个更改100为500.
Ila*_*mer 11
about 500ms,我认为它不必如此准确setInterval 不适合这么多东西:var func = function(i){
return function(){
if (i >= 75) return;
console.log("turn no. " + i);
if(table.game.playerWon) {
console.log('Player won');
} else {
setTimeout(func(++i), 500);
}
}
}
setTimeout(func(0), 500);
Run Code Online (Sandbox Code Playgroud)
node.js如果要检查其工作原理,可以运行它:var winTurn = 10;
var func = function(i){
return function(){
if (i >= 75) return;
console.log("turn no. " + i);
if(i === winTurn) {
console.log('Player won');
} else {
setTimeout(func(++i), 50);
}
}
}
setTimeout(func(1), 50);
Run Code Online (Sandbox Code Playgroud)
我认为最好使用 setInterval 而不是 setTimeout。
为了清除它们,您将它们分配给一个变量,然后使用
var myVar = setTimeout(func, time);
var myVar2 = setInterval(func, time);
clearTimeout(myVar);
clearInterval(myVar2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20150 次 |
| 最近记录: |