2012-05-10 72 views
7

我試圖模擬出一個方法,它需要很長時間才能進行測試,但是找不到一個在Javascript中執行此操作的好方法。除了寫一個很長的循環之外,還有什麼好的方法?如何在Javascript中編寫阻塞同步方法?

+0

很長的循環有什麼問題?或者一個檢查時間的循環? – Joseph

+0

沒有錯,只是希望我能做些像睡眠(毫秒)的事情。很難弄清楚循環需要多大,但沒有試驗和錯誤無法解決。 –

+0

在Firefox中,您可以使用[trampolining](http://tobyho.com/2010/12/10/trampolines-in-javascript-and/「Trampolines in Javascript and the Quest for Less Nested Callbacks」)進行異步JavaScript調用同步。 –

回答

7

怎麼樣?

function sleep(milliSeconds){ 
    var startTime = new Date().getTime();     // get the current time 
    while (new Date().getTime() < startTime + milliSeconds); // hog cpu until time's up 
} 
+0

不錯。後見之明非常明顯。 –

+1

這可能會導致JavaScript引擎阻止其他線程(Firefox 4.0以外的瀏覽器不允許用戶切換標籤或執行其他任何操作)。最終瀏覽器會注意到這一點,並終止您的腳本。不是一個好主意。 –

+0

在Chrome中工作,這就是我所關心的。這顯然不會進入任何部署的代碼:) –

3

您可以對服務器進行同步AJAX調用,將服務按照腳本的請求延遲一段時間。但請注意,此方法在Firefox中不起作用,因爲它不支持同步AJAX調用。

只要使用這個簡單的功能,在客戶端:

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

在服務器端爲sleep.php代碼:

usleep(intval($_GET("sleep"))); 

現在你可以創建阻止同步功能的JavaScript(例外情況如下:

alert("Hello"); 
sleep(1000000); // sleep for 1 second 
alert("World"); 
+0

+1很好知道,但工作太多:) –

相關問題