带有延迟代码修复的javascript循环

时间:2016-10-29 12:55:53

标签: javascript

如何根据

修复此代码

How do I add a delay in a JavaScript loop?

它仍然会毫不拖延地执行。

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();

3 个答案:

答案 0 :(得分:1)

你不能暂停&#34;这样的javascript。 setTimout是异步的,这意味着它不会阻止同步代码运行,所以当你运行任何类型的&#34; for&#34;循环,它会立即调用所有setTimeouts

您可以像这样进行手动循环并使用递归来延迟它:

&#13;
&#13;
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();
&#13;
&#13;
&#13;

有关详细信息,请查看this answer.

答案 1 :(得分:-1)

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

访问数组项

答案 2 :(得分:-2)

我真的没有setTimeout(() => { // call a 3s setTimeout when the loop is called尝试

var wait = "some amount of milliseconds"

setTimeout(wait) => {