我在Javascript中遇到函数回调和超时问题。
我有一些DIV,那些必须"脉冲"相继。 它们的值在一个数组中。 每次DIV脉冲时,该数组都会递增。
红色脉冲所以gameArr = [" red"]等等...
var k = 0;
setTimeout(function(){
for(let value of gameArr){
toPulse(value)
k++;
console.log(gameArr);
if(k == gameArr.length){
playerTurn()
}
}
},2000);
每次我使用这个时,所有的DIV都会一起脉冲而不是一个接一个。
答案 0 :(得分:0)
所以在这里,您的for
函数内部有setTimeout()
循环 。
你可以做的是有一个迭代器变量,并在你的setTimeout()
循环中放置一个for
。
看到这样的话:
let k = 0;
const interval = 2000;
for (let value of gameArr) {
setTimeout(() => {
toPulse(value)
}, k * interval);
k++;
console.log(gameArr);
if (k == gameArr.length) {
playerTurn()
}
}
不要忘记Javascript是 async ,这意味着setTimeout
函数将完全在 sync 代码的其余部分之外执行。使用上面的代码,您可以创建与数组中的元素一样多的超时,每个元素的延迟与它们在数组中的位置成比例。