2011-06-14 107 views
4

是否有延遲函數返回,使用setTimeout()延遲函數返回

function foo(){ 
    window.setTimeout(function(){ 
     //do something 
    }, 500); 
//return "some thing but wait till SetTimeout() finished"; 
} 
+0

的*的setTimeout *調用不會啓動,直到目前的功能已經完成,因此,如果當前函數正在等待* setTimeout *返回它將有一個非常長的等待...... :( – RobG 2011-06-14 04:57:03

回答

0

就打電話給你要的東西在超時功能結束超時後發生如下:

function foo() 
{ 
    window.setTimeout(function() 
    { 
     //do something 

     delayedCode(returnValue); 
    }, 500); 

    return 
} 

function delayedCode(value) 
{ 
    // do delayed stuff 
} 

而不是返回。將依賴返回值的代碼放入delayedCode()並將參數傳遞給該函數。

2

您不想「延遲」代碼,因爲它會鎖定瀏覽器線程,導致整個瀏覽器無法使用,直到您的腳本超時已過。

您可以設置一個事件,偵聽經過一段時間後觸發的信號。 jQuery的.bind().trigger()是你想要​​

什麼,或者,你可以使用一個回調函數,你想要的時間ellapsed後的數據進行工作。所以,如果你打算是這樣的:

function myFunc() { 
    doStuff(); 
    result = delayProcess(5000); 
    $('#result').html(result); 
} 

function delayProcess(delay) { 
    // magic code that delays should go here 
    return logic; 
} 

應該是這樣的:

function myFunc() { 
    doStuff() 
    delayProcess(5000, function(result){ // Notice the callback function pass as an argument 
    $('#result').html(result);  
    }); 
} 

function delayProcess(delay, callback) { 
    result = logic; 
    setTimeout(function(){ 
    callback(result); 
    }); 
} 
+0

這與從* myFunc *調用* setTimeout *相同,除了在上面的*結果*成爲一個全局變量的時刻在* delayProcess *函數中賦值 – RobG 2011-06-14 05:06:20

+0

'setTimeout'不會'阻塞'進一步的代碼執行 – KooiInc 2011-06-14 05:11:08