2014-03-01 207 views
0

我希望我的程序在每次执行之间延迟执行。现在我有这样的:使用setTimeout(函数,延迟)的函数之间的JavaScript延迟

function function0() { 
    setTimeout(function1, 3000); 
    setTimeout(function2, 3000); 
    setTimeout(function0, 3000); 
} 

有function0的每次执行之间的延迟,但并不功能1和funtion2之间,函数2在功能1后立即运行。我该如何解决这个问题?

+0

在世界上什么是你想怎么办?该代码仅在3秒后运行每个函数... – aet

+0

'setTimeout'是非阻塞的。 – Charlie

回答

2

这是不优雅,但它应该工作..在功能2结束时,功能1将在3秒后执行,功能1和循环功能相同。

function function0() { 
    setTimeout(function() { 
     // <my_function2> 

     setTimeout(function() { 
      // <my_function1> 

      setTimeout(function0, 3000); 
     }, 3000); 
    }, 3000); 
} 
0

所有功能都在3秒后执行。您的意思是要做到这一点:

function function0() { 
    setTimeout(function1, 3000); 
    setTimeout(function2, 6000); 
    setTimeout(function0, 9000); 
} 
0

setTimeout是非阻塞,因此所有三种这些功能将在3秒后运行。将其更改为如下所示:

function function0() { 
    setTimeout(function1, 3000); 
    setTimeout(function2, 6000); 
    setTimeout(function0, 9000); 
} 

会使它们每个间隔运行3秒。如果你不想硬编码这一点,你可以使用setInterval,递增函数名(因为你的函数有一个数字来区分它们),再经过反复的X量停止:

var i = 0, 
int = setInterval(function() { 
    // Function logic 
    i++; 
    if (i === 3) { 
     clearInterval(int); 
    } 
}, 1000); 
0

或者你可以这样做:

function function0() { 
    setTimeout(function1, 3000); 
} 
function function1() { 
    /* 
    Your code here 
    */ 
    setTimeout(function2, 3000); 
} 
function function2() { 
    /* 
    Your code here 
    */ 
    setTimeout(function3, 3000); 
} 
function function3() { 
    /* 
    Your code here 
    */ 
}