暂停循环并等待事件,然后再进行下一次迭代

时间:2019-12-28 09:25:45

标签: javascript loops

全部:

我有一个循环,其中有一个超时,试图在动画和声音结束之前暂停并进行迭代,然后再继续进行下一个迭代。我发现当我遇到超时匿名函数并导致无限循环时,我没有增加。这是代码:

var i = 0;

while (i < gamePattern.length - 1) {
  console.log(i);
  buttonAnimation(gamePattern[i]);
  buttonSound(gamePattern[i]);
  setTimeout(() => {
    i++;
  }, 400);
}

我当时正在考虑尝试使用Promise进行设置,但是我不认为这实际上会像我一样暂停迭代。任何想法都将不胜感激。

谢谢

凯文

1 个答案:

答案 0 :(得分:0)

始终使用let,const。 var很旧,容易出错。

将async / await与promises配合使用,您可以实现两次迭代之间的代码等待时间

const wait = (cb, time) => {
  return new Promise(res => {
    setTimeout(() => {
      cb();
      res();
    }, time)
  })
}

async function doSomeThing(){
  let i = 0;

  while(i < gamePattern.length-1){
    console.log(i);
    buttonAnimation(gamePattern[i]);
    buttonSound(gamePattern[i]);
    await wait(() => {i++;}, 400)
  }
}
doSomeThing()