Javascript循环与延迟代码修复

javascript loop with delay code fix

本文关键字:代码 延迟 循环 Javascript      更新时间:2023-09-26

如何按

修复此代码

如何在JavaScript循环中添加延迟?

仍然会被毫不延迟地执行。

const spkz = responsiveVoice.speak;
let azj = ['hi', 'hello', 'how are ya'];
var i = 1; //  set your counter to 1
function myLoop() { //  create a loop function
  azj.forEach((item, index) => {
    setTimeout(() => { //  call a 3s setTimeout when the loop is called
      alert(item); //  your code here
      i++; //  increment the counter
      if (i < index) { //  if the counter < 10, call the loop function
        myLoop(); //  ..  again which will trigger another 
      } //  ..  setTimeout()
    }, 10000)
  })
}
myLoop();

你不能像那样"暂停" javascript。a setTimout是异步的,这意味着它不会阻止同步代码的运行,所以当你运行任何类型的"for"循环时,它会一次调用所有的setTimeouts

您可以像这样创建一个手动循环,并使用递归延迟它:

let azj = ['hi', 'hello', 'how are ya'];
var i = 0;
function myLoop() {
  setTimeout(function() {
    console.log(azj[i])
    i++
    
    if (i < azj.length) {
      myLoop()
    }
  }, 3000)
}
myLoop();

您不必在循环函数中使用forEach。相反,您可以使用azj[i]

访问数组项