Javascript 暂停循环并等待事件,然后再移动到下一个迭代

Javascript 暂停循环并等待事件,然后再移动到下一个迭代,javascript,loops,Javascript,Loops,全部: 我有一个循环,在循环中我有一个超时来尝试暂停一个迭代,而动画和声音在进入下一个迭代之前完成;我发现当它点击timeout匿名函数并导致无限循环时,我并没有增加。代码如下: var i = 0; while (i < gamePattern.length - 1) { console.log(i); buttonAnimation(gamePattern[i]); buttonSound(gamePattern[i]); setTimeout(() => {

全部:

我有一个循环,在循环中我有一个超时来尝试暂停一个迭代,而动画和声音在进入下一个迭代之前完成;我发现当它点击timeout匿名函数并导致无限循环时,我并没有增加。代码如下:

var i = 0;

while (i < gamePattern.length - 1) {
  console.log(i);
  buttonAnimation(gamePattern[i]);
  buttonSound(gamePattern[i]);
  setTimeout(() => {
    i++;
  }, 400);
}
var i=0;
而(i{
i++;
}, 400);
}
我想尝试用承诺来建立它,但我觉得这不会像我想的那样暂停迭代。任何想法或想法都将不胜感激

谢谢,


凯文总是用let,const。var很旧,而且容易出错

使用async/await with Promissions可以实现迭代之间的代码等待时间

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()
const wait=(cb,time)=>{
返回新承诺(res=>{
设置超时(()=>{
cb();
res();
},时间)
})
}
异步函数doSomeThing(){
设i=0;
而(i{i++;},400)
}
}
doSomeThing()

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

使用async/await with Promissions可以实现迭代之间的代码等待时间

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()
const wait=(cb,time)=>{
返回新承诺(res=>{
设置超时(()=>{
cb();
res();
},时间)
})
}
异步函数doSomeThing(){
设i=0;
而(i{i++;},400)
}
}
doSomeThing()

这是否回答了您的问题?处理这个问题有多种方法。straigthforward方法是对循环使用
,对超时延迟使用类似于
i*400的公式。这是否回答了您的问题?处理这个问题有多种方法。straigthforward方法是对
循环使用
,并对超时延迟使用类似于
i*400的公式然后
等待等待(400);i++对于返回承诺的函数,不应该需要回调…为什么不干脆
const wait=time=>new promise(resolve=>{setTimeout(resolve,time);})然后
等待等待(400);i++对于返回承诺的函数,不应该需要回调。。。