如何根据
修复此代码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();
答案 0 :(得分:1)
你不能暂停&#34;这样的javascript。 setTimout
是异步的,这意味着它不会阻止同步代码运行,所以当你运行任何类型的&#34; for&#34;循环,它会立即调用所有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();
&#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) => {