我試圖模擬出一個方法,它需要很長時間才能進行測試,但是找不到一個在Javascript中執行此操作的好方法。除了寫一個很長的循環之外,還有什麼好的方法?如何在Javascript中編寫阻塞同步方法?
回答
怎麼樣?
function sleep(milliSeconds){
var startTime = new Date().getTime(); // get the current time
while (new Date().getTime() < startTime + milliSeconds); // hog cpu until time's up
}
不錯。後見之明非常明顯。 –
這可能會導致JavaScript引擎阻止其他線程(Firefox 4.0以外的瀏覽器不允許用戶切換標籤或執行其他任何操作)。最終瀏覽器會注意到這一點,並終止您的腳本。不是一個好主意。 –
在Chrome中工作,這就是我所關心的。這顯然不會進入任何部署的代碼:) –
您可以對服務器進行同步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");
+1很好知道,但工作太多:) –
- 1. 如何編寫非阻塞javascript方法?
- 2. 同步方法執行時,非同步方法是否阻塞
- 3. 同步阻塞?
- 4. 將異步/回調方法轉換爲阻塞/同步方法
- 5. 如何處理阻塞同步外部DLL方法
- 6. 如何編寫異步JavaScript方法?
- 7. 默認爲Javascript同步(阻止)或異步(非阻塞)
- 8. 你如何使YUI同步/阻塞XMLHttpRequest
- 9. 在java中阻塞(同步)ftp下載?
- 10. 在JavaScript中編寫非阻塞循環的最簡潔方法是什麼?
- 11. 非阻塞同步AJAX
- 12. 你如何編寫非阻塞模塊?
- 13. Apache的FileUtils中的方法執行同步(阻塞)I/O嗎?
- 14. 在nodejs中編寫「阻塞」代碼
- 15. 將同步方法轉換爲非阻塞算法
- 16. 如何以阻塞/同步方式下載文件?
- 17. 如何在Javascript中編寫Array.prototype.every()方法
- 18. 如何在JavaScript中編寫mutator方法?
- 19. 重繪窗口控制同步(使用阻塞方法)
- 20. 是否可以在沒有c代碼的情況下在純Javascript(nodejs)中編寫同步阻塞IO?
- 21. 如何在Node JS中編寫非阻塞if語句?
- 22. 如何使用node.js在stdout中編寫阻塞?
- 23. 如何編寫一個可中止的同步方法?
- 24. 扭曲的非阻塞方法 - 如何?
- 25. 阻塞與同步,非阻塞和異步之間有什麼區別?
- 26. 是否在同步GCD隊列上放置一個阻止阻塞並暫停其他阻塞的阻塞?
- 27. 如何在不阻塞的情況下同步線程?
- 28. 非阻塞寫入和阻塞recv
- 29. 如何編寫異步方法?
- 30. Java同步:無阻塞鎖定
很長的循環有什麼問題?或者一個檢查時間的循環? – Joseph
沒有錯,只是希望我能做些像睡眠(毫秒)的事情。很難弄清楚循環需要多大,但沒有試驗和錯誤無法解決。 –
在Firefox中,您可以使用[trampolining](http://tobyho.com/2010/12/10/trampolines-in-javascript-and/「Trampolines in Javascript and the Quest for Less Nested Callbacks」)進行異步JavaScript調用同步。 –