2012-01-02 70 views
1

我有一段JS代碼片段,我使用它來介紹在調用之間引入暫停。該片段是:爲什麼在console.log之前執行JS警報時,循環跟在語句後

function intPause(_wg_time_msec) { 
    var _wg_now = new Date(); 
    var _wg_expire = _wg_now.getTime() + _wg_time_msec; 
    while(_wg_now.getTime() < _wg_expire) 
     _wg_now = new Date(); 
} 

現在我看到的是,如果一個警報添加到while循環之前此功能,它顯示了警報瞬間,然後運行while循環,但如果我添加的console.log代替console.log在while循環完成後回顯數據。有人能幫助我理解這種行爲嗎?我怎樣才能找到一種更好的方式在呼叫之間引入暫停。

+6

這是一個非常可怕的事情做的人訪問你的網站。您基本上是使用該代碼加載CPU,並且很可能導致瀏覽器發出「緩慢的腳本」警告。改用'setTimeout()'。 – Pointy 2012-01-02 14:26:49

+2

哦,'console.log()'不同於'alert()',因爲它不一定是同步的。這就是它實施的方式。 – Pointy 2012-01-02 14:27:46

+0

你正在嘗試做什麼?你爲什麼需要在他們之間暫停? – Jason 2012-01-02 14:30:14

回答

0

則可以暫時將AJAX使用jquery調用是同步的:

$.ajaxSetup({ "async": false }); 
// make synchornous ajax call 
var jqHxr = $.get(....) 
$.ajaxSetup({"async": true}); 
+0

我甚至可以在調用時調用ajax調用,但要點是如果服務器在給定時間內沒有響應,我不希望它卡住。我認爲,在Ajax調用中添加一個錯誤超時會相當有用。有什麼建議嗎? – Neo 2012-01-02 15:16:57

+0

你可能應該閱讀jquery.ajax api(http://api.jquery.com/jQuery.ajax/) - 有一個超時設置的ajax方法,可以重寫相同的方式(即$ .ajaxSetup({ 「timeout」:1000});)。如果請求超時,錯誤函數將被調用。 – Jason 2012-01-02 15:25:08

+0

這就是我所說的,我將不得不改變我的Ajax調用來這樣做。但是我想這樣做是最後一件事,Sync調用也會延遲頁面卸載事件嗎? – Neo 2012-01-02 15:34:55

相關問題