将setTimout添加到forEach

时间:2018-06-04 07:38:21

标签: javascript

提前谢谢。 我尝试使用forEach方法循环基本数组,并为每个循环使用setTimeout函数的组合。我的目标是遍历数组,以便控制台每隔2000秒记录数组中的以下项目,例如:

  • 目前我无法弄清楚如何做到这一点。
  • 有没有办法向forEach方法输入布尔语句?



// Declaring vars
var numbers = [1,2,3,4,5];

// looping over the array
numbers.forEach(number =>{
  setTimeout(()=> console.log(number), 2000 );  
})




事先感谢所有人:)

5 个答案:

答案 0 :(得分:2)

您可以递归地执行此操作:



var numbers = [1,2,3,4,5];

function logNumber(index) {
  console.log(numbers[index]);
  if (index < numbers.length - 1) {
    setTimeout(()=> logNumber(index + 1), 2000 );
  }
}

logNumber(0);
&#13;
&#13;
&#13;

或者使用promise和async等待:

&#13;
&#13;
var numbers = [1,2,3,4,5];
async function logAll() {
    for(n of numbers) {
        await logNumber(n);
    }
}

function logNumber(n) {
  return new Promise(resolve => setTimeout(() => { 
    console.log(n);
    resolve();
  }, 2000));
}

logAll();
&#13;
&#13;
&#13;

答案 1 :(得分:1)

forEach循环的执行如此之快,差异以毫秒(<1毫秒)为单位。你可以通过以下方式实现它:

// Declaring vars
var numbers = [1,2,3,4,5];

// looping over the array
numbers.forEach( (number,i) =>{
  setTimeout(()=> console.log(number), 2000 * i );  
})

所以第一个会延迟2秒,第二个会延迟4秒,......反之亦然。递归选项也很好,它可以让你更好地控制执行。

答案 2 :(得分:0)

您可以尝试这样的事情:

    var numbers = [1,2,3,4,5];
    var i = 0;
    // looping over the array
    numbers.forEach(number =>{
      i++;
      setTimeout(()=> console.log(number), i*2000);  
    })

答案 3 :(得分:0)

将您的代码更改为:

next

答案 4 :(得分:0)

您可以使用Array.prototype.foreach()函数回调的可选index参数。请注意,由于JavaScript数组从零开始,您应该使用++i递增

代码:

&#13;
&#13;
// Declaring vars
const numbers = [1, 2, 3, 4, 5];

// looping over the array
numbers.forEach((n, i) => setTimeout(() => console.log(n), 2000 * ++i));
&#13;
&#13;
&#13;