2014-03-01 248 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 
    */ 
}