在javascript中,如何在固定的时间间隔后调用固定次数的函数

在javascript中,如何在固定的时间间隔后调用固定次数的函数,javascript,d3.js,Javascript,D3.js,我想在固定的时间间隔后,以固定的次数调用on-event函数 不工作的代码示例 function work(i){ remove(); draw(i); } d3.select("body").select('button').on('click', function() { for(var i=0;i<7;i++){ setTimeout(function(i){ remove(); draw(i); },1500

我想在固定的时间间隔后,以固定的次数调用on-event函数

不工作的代码示例

function work(i){
   remove();
   draw(i);          
 } 

d3.select("body").select('button').on('click', function() {
 for(var i=0;i<7;i++){
   setTimeout(function(i){
     remove();
     draw(i);
    },1500);                                    
   }
 });
功能工作(一){
删除();
抽签(i);
} 
d3.选择(“主体”)。选择(“按钮”)。打开(“单击”,功能)(){

对于(var i=0;i所有
setTimeout
调用都是在循环中的每个调用之后立即进行的,不需要等待对方完成。您可以使用
setInterval
来实现所需的功能:

function work(i) {
   remove();
   draw(i);          
} 

d3.select("body").select('button').on('click', function () {
    work(0);
    var times = 1,
        myInterval = setInterval(function () {
            work(times);
            times++;
            if (times === 7) {
                clearInterval(myInterval);
            }
        }, 1500);
});

使用
setTimeout

function work(i){
   remove();
   draw(i); 
   if(i<=7){//set your condition
    setTimeout(function(i){
      i++;
      work(i);
    },1500); 
   }         
 } 

d3.select("body").select('button').on('click', function() {
  work(0);
});
功能工作(一){
删除();
抽签(i);

如果(i)它怎么不工作?或者您可以将超时设置为
1500*(i+1)
@LarsKotthoff运行多个并发的
设置超时
或单个
设置间隔
?在setTimeout中的函数在1.5秒后运行之前,for循环如何开始下一次迭代?@user3074097您的意思是需要
删除();绘制(次);
立即调用函数,而不是让函数等待1.5秒?如果是这样,我将更新我的答案?@Jonathan我不认为同时运行多个函数会更昂贵。也就是说,我没有对其进行测量,7年来,它肯定不会在实践中产生可测量的差异。