2011-11-15 99 views
20

如果我有一個函數,我希望我的js代碼立即運行它,但運行後等待2秒鐘。如何實現這一邏輯?如何在函數運行後等待一段時間

注:這是相反的邏輯與setTimeout()比較,因爲setTimeout()先等待一段時間再執行該功能)

+0

你能給我幾行代碼嗎?我認爲你在尋找.delay(),但現在還不確定。 –

+0

好吧,我想你在做別的事情之前必須等2秒鐘。在你執行你的函數之後,使用setTimeout()函數;-) –

+0

似乎你想等到2秒後再返回到調用函數。如果是,那麼在返回之前使用setTimeout() – Rohan

回答

34

只要把你的代碼傳遞給setTimeout的匿名函數內。

例如

functionToRunFirst(); 
setTimeout(function() { 
    // rest of code here 
}, 2000); 
2

什麼是「等待2秒鐘」的意思。?你的意思是你想阻止從該功能返回2秒?

如果是這樣,你不能這樣做。 JavaScript中沒有sleep()函數。

你必須只使用的setTimeout()

3

使用setTimeout是一個辦法做到這一點

function run() {  
    // run this code 

    setTimeout(afterTwoSeconds, 2000);  
} 

function afterTwoSeconds() {  
    // run this code two seconds after executing run. 
} 

// call run 
run(); 
1

沒有錯,上述問題的答案,但以不同的方式爲:

$("#somethingThatDoesntExist").fadeTo(2000, 1, function() { 
    // two seconds later 
}); 
+1

這是你的相當黑客。爲什麼不''.delay()'如果jquery是你的選擇? –

+0

因爲我不知道.delay(),謝謝!我也認爲OP提到了jQuery,但我似乎錯了。 –

+0

他沒有標記他的問題jquery。 –

6

我想你重新尋找是暫停執行代碼直到超時的方法。許多業餘程序員都希望有這樣的構造,但它不存在於JavaScript中。這不是必需的。出於所有目的,JavaScript setTimeoutsetInterval是完美的候選解決方案。

但是,JavaScript是一種功能強大的語言。您可以構建自己的構造來解決此問題。看看Neil Mix的blog post。他的做法,您可以創建可沿以下線路上使用睡眠功能(注意,目前只有Firefox的支持JavaScript 1.7):

function mainGeneratorFunction() { 
    functionToRunFirst(); 
    yield sleep(2000); 
    //rest of the code 
} 

然而,對於其他瀏覽器不要絕望。您可以使用名爲XHR Sleeping的黑客。在這種方法中,您只需使用同步XMLHttpRequest來調用像php這樣的服務器端腳本,然後該腳本在指定時間內休眠並在喚醒後返回。 JavaScript代碼如下:

function sleep(microseconds) { 
    var request = new XMLHttpRequest(); 
    request.open("GET", "sleep.php?time=" + microseconds, false); 
    request.send(); 
} 

functionToRunFirst(); 
sleep(2000000); 
//rest of the code 

PHP的睡眠功能如下:

<?php 
    usleep($_GET["time"]); 
?> 
1

給予一定的填寫上你的一部分,這應該與半秒定時器運行5次

var counter = 0; 
var arrayOfPicture = []; //fill this out 

function gifSimulator() { 

    //use the counter as an index in the array, and change the image source of your element with that. 


    if (counter < 5) { 

     setTimeout(function() { 

      counter++; 

      gifSimlulator(); 

     }, 500); //lets wait half a second 
    } 
} 
0

我不知道你們爲什麼要這麼多。我相信我們可以使用Date對象來做到這一點。先取日期值,然後使用setInterval函數等待,直到獲得指定的時間間隔(獲取新日期並檢查差異)。一旦我們得到這個重置間隔函數並且在它可以運行之後繼續執行你的代碼。

相關問題