我正在尝试使用异步等待在循环中的每次迭代之间设置延迟。我有一个辅助睡眠功能:

const sleep = ms => {
  return new Promise(resolve => {
    setTimeout(resolve, ms);
  });
}

这在每个循环之间正确等待:
for (let i = 0; i < 5; i++) {
    console.log('waiting')
    await sleep(1000)
}

但是,这不在每个循环之间等待:
[0, 1, 2, 3, 4].forEach(async () => {
    console.log('waiting')
    await sleep(1000)
});

如何修改forEach代码块,使其表现为常规的for循环块,且for循环的每次迭代之间都有延迟?

最佳答案

从理论上讲,您可以建立一个Promise链,使用reduce可以使它更漂亮,但也可以使用forEach来完成相同的模式:

[0, 1, 2, 3, 4].reduce(async (previous) => {
  await previous;
  console.log('waiting')
  await sleep(1000)
});

但是...为什么不只使用for循环呢?

09-20 09:45