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

事先感谢所有人:)
答案 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;
或者使用promise和async等待:
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;
答案 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
递增
代码:
// Declaring vars
const numbers = [1, 2, 3, 4, 5];
// looping over the array
numbers.forEach((n, i) => setTimeout(() => console.log(n), 2000 * ++i));
&#13;