我甚至不知道如何开始这个:我需要一个执行function
的for循环(比如一个简单的console.log()
),每次执行之间都有一个定时延迟。我一直试图用setTimeout()
来做它,它永远不会奏效。如果我从setTimeout调用具有循环的函数,它将无法工作。理想情况下,我希望我的for
循环打印x次,每次打印之间延迟几秒钟。任何想法如何工作?我尝试过这样的事情:
function printStuff(){
for(var i=0;i<5;i++){
console.log(i);
}
};
setTimeout(printStuff(),1000);
答案 0 :(得分:5)
对我来说,你应该执行setInterval
,在这里你应该增加反击。当计数器达到极限时,您只需清除间隔。
var counter = 0;
var limit = 10;
var myVar = setInterval(function(){
if (counter > limit)
{
clearInterval(myVar);
}
counter++;
console.log("test");
}, 1000);
答案 1 :(得分:2)
init();
function init() {
setTimeout(init, 2*1000); // wait 2 sec then call init again
console.log(Date());
}
或使用setInterval
:
// Call init after 2 sec and repeat calling it every 2. sec
setInterval(init, 2*1000);
function init() {
console.log(Date());
}
答案 2 :(得分:1)
您可以使用async模块。
var count = 0;
async.whilst(
function () { return count < 5; },
function (callback) {
count++;
console.log(count);
setTimeout(callback, 1000);
},
function (err) {
// 5 seconds have passed
}
);
这样,计数将每秒打印
答案 3 :(得分:1)
var i = 0;
function timeout(){
setTimeout(log, 1000);
}
function log(){
console.log(i++);
timeout();
}
log();
答案 4 :(得分:0)
使用setInterval()
代替setTimeout()
。参数是一样的:
setInterval(function () {
// your utility code goes here
}, 2000);
答案 5 :(得分:0)
这是另一种方法。使用包装函数。
var time = 2000;
for (var i = 0; i < 10; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, time);
})(i);
time+=2000;
}
答案 6 :(得分:0)
您可以使用要运行的迭代次数创建一种延迟循环函数。像这样:
var delayedLoop = function (n, milliseconds) {
var iteration = function (n) {
if (n > 0) {
n--;
console.log(n);
setTimeout(function () {
iteration(n)
}, milliseconds);
}
};
iteration(n);
}
delayedLoop(4, 1000);
你甚至可以扩展这个想法,甚至每次都要传递一个函数。
请参阅demo。
答案 7 :(得分:0)
这是我认为比setInterval
更简单(and doesn't have the fallbacks of)
var limit = 10,
counter = 0,
delay = 1000;
function doIt() {
document.body.innerHTML += 'Hit counter: ' + (counter++) + '<br />';
if (counter < limit) {
setTimeout(doIt, delay);
}
}
doIt();
你可以概括它
function runTimedLoop(delay, howMany, callback) {
var index = 0;
function iteration() {
callback(index++);
if (index < howMany) {
setTimeout(iteration, delay);
}
}
iteration();
}
runTimedLoop(1000, 10, function(index) {
document.body.innerHTML += 'Hit counter: ' + (index++) + '<br />';
});