因此,我正在尝试使用创建循环来做到这一点:
setTimeout(function() {
console.log("Hey!");
setTimeout(function() {
console.log("Hey!");
setTimeout(function() {
console.log("Hey!");
}, 1000);
}, 1000);
}, 1000);
所以,我这样尝试了。
for (i = 0; 1 < 3; i++){
setTimeout(function() {
console.log("Hey!");
}, 1000);
}
但是,它不起作用。
做一些研究,我注意到这是因为每个循环的timeouts相互增加。我该如何解决?
答案 0 :(得分:1)
您必须递归调用超时,因此编写一个函数,该函数接受当前尝试次数的参数。让它执行操作,然后使用trys参数+ = 1调用自身。
您应该传递多次尝试作为保护措施,以便您可以告诉函数 not 如果尝试次数大于一定限制,则可以自行调用,以避免无限循环。
类似的东西:
timedLog(attempts) {
console.log('Hey!');
if (attempts > 10) {
return;
} else {
setTimeout(function() { timedLog(attempts + 1); }, 1000);
}
}
它看起来不再像是for循环,但这是相同的原理。
答案 1 :(得分:0)
如果每个函数的输出相同,并且您希望以相同的间隔打印它,则可以使用setInterval
。
function myInterval() {
return setInterval(function(){
console.log("Hey!");
}, 1000);
};
var id = myInterval();
它会永远重复,因此,在这种情况下,您必须在3000
毫秒后停止它。
setTimeout(function(){
clearInterval(id);
}, 3000);
答案 2 :(得分:0)
只需使用循环,每次都增加超时间隔:
for (let i = 0; 1 < 3; i++){
setTimeout(function() {
console.log("Hey!");
}, i*1000);
}
(请注意,如果您的回调函数依赖于i
,则在var
循环头中使用let
而不是for
时,此功能将无法正常工作。原因是与闭包有关-SO上对此有很多疑问,但它与let
完美配合-如果由于某种原因您不能使用let
,还有其他足够简单的修复程序)