setTimeout函数不同步

时间:2015-09-15 04:14:50

标签: javascript jquery

我刚刚完成了一个西蒙说用javascript / jquery编写的游戏。一切都运转正常,除了第二轮后西蒙的播放顺序。会发生什么事情是simon press决定播放的新随机按钮作为播放序列中的第二个按钮,当它应该只是最后一个时(我说只是因为它也在最后播放)。我认为setTimeout和setInterval之间存在差异,但我对它是什么一无所知。关于为什么会发生这种情况的任何想法?这是我的好措施的代码:http://codepen.io/vinnyA3/pen/avvGbM?editors=001
(按开,然后开始游戏)

function playSimonSequence() {
 var i = 0;
 var myInterval = setInterval(function(){
       //send in the correct button name and url to add the button pressed effect
       lightsAndSounds(buttonsAndUrls[simonArray[i]].button, buttonsAndUrls[simonArray[i]].url);
       ++i;
       if(i === simonArray.length){clearInterval(myInterval);}
 },1500);

//this is running at the wrong time
setTimeout(randomButtonPress, 2210);

}; //end simon sequence

1 个答案:

答案 0 :(得分:0)

您有一个1500毫秒的间隔计时器和一个2210毫秒的单个计时器同时运行。您应该看到第一个间隔为1500毫秒,单个计时器为2210毫秒,然后第二个间隔计时器为3000毫秒,依此类推。这就是你的代码指定的方式。

你的计时器都在同一时间运行。

Javascript不等待运行您的setTimeout(),直到完成所有间隔。相反,两个计时器都会立即安排在未来的时段和一起运行。

如果您希望在清除时间间隔后运行setTimeout(),请将setTimeout()放在您致电clearInterval()的代码块中。