我有一个while循环每秒调用一个函数:
function draw (){
console.log(then-now)
};
var i = 0
while(i < 100){
setTimeout(draw,1000)
i++;
};
但是这并不是每次抽签之间等待一秒钟,而是一次叫它100次。
答案 0 :(得分:3)
尝试setInterval
:
function draw (){
console.log(then-now)
i++;
if (i >= 100) clearInterval(interval);
};
var i = 0
var interval = setInterval(draw, 100);
如果您想使用setTimeout
,则必须在draw
函数本身内设置下一次迭代。
function draw (){
console.log(then-now)
i++;
if (i < 100) setTimeout(draw, 100);
};
var i = 0;
setTimeout(draw, 100);
这是因为setTimeout
是异步的,所以你的while循环不会暂停 - 它会继续运行,几乎立即启动draw
的每个实例。
答案 1 :(得分:2)
你似乎想要
while(i < 100){
i++;
setTimeout(draw, i*1000);
};
请注意setTimeout
为将来安排任务,但不等待 - 它会立即返回,使您的代码异步。
但是,一次排队100个任务并不是一个好习惯。更好:
var i = 0;
function draw (){
console.log(then-now)
if (i<100) {
i++;
setTimeout(draw, 1000); // maybe adjusted to actual time
}
};
draw();
答案 2 :(得分:1)
setTimeout(draw, 1000);
应该是:
setTimeout(draw, 1000 * (i + 1));
因此创建的每个超时都会1s
更长。
i + 1
是第一次超时为1000
,而不是0
,因为i
从0
开始。