我想在while循环中添加一个delay/sleep:
我是这样试的:
alert('hi');
for(var start = 1; start < 10; start++) {
setTimeout(function () {
alert('hello');
}, 3000);
}
只有第一种情况是正确的:在显示alert('hi')后,它将等待3秒,然后alert('hello')将显示,但随后alert('hello')将不断重复。
我想要的是,在警报('hello')显示3秒后警报('hi'),然后它需要等待3秒的第二次警报('hello'),以此类推。
试试这个
var arr = ['A','B','C'];
(function customLoop (arr, i) {
setTimeout(function () {
// Do here what you want to do.......
console.log(arr[i]);
if (--i) {
customLoop(arr, i);
}
}, 2000);
})(arr, arr.length);
结果
A // after 2s
B // after 2s
C // after 2s
除了10年前接受的答案之外,使用更现代的Javascript,可以使用async/await/Promise()或生成器函数来实现正确的行为。(其他答案中建议的错误行为是设置一系列3秒警报,而不管“接受”警报()-或完成手头的任务)
使用异步/等待/承诺():
alert('嗨');
(async () => {
For (let start = 1;起始值< 10;开始+ +){
等待新的承诺(resolve => setTimeout(() => {
alert('你好');
解决();
}, 3000));
}
}) ();
使用生成器函数:
警报(“嗨”);
让函子;
(func = (function*() {
for(let start = 1, start < 10, start++) {
yield setTimeout(() => {
警报(“你好”);
func.next();
}, 3000);
}
})()).next();