2012-04-11 115 views
0

我正在使用jquery中的每個函數,它看起來像它正在移動到一個函數,需要每個循環的結果之前,他們完成...在這裏是代碼等待。每個完成之前繼續(jQuery)

$.each(array, function(index, value) { 
    prob[value] = get_probs(value); 
}); 

sim(prob); 

function sim(prob){ 
    //alert ("test"); 
    alert (prob[value]); 
    new_sim(prob[value]); 
} 

如果我取消註釋警報(「測試」);它顯然會顯示一條警報,然後它會在第二條警報中顯示正確的數字,但是,如果我保留原樣,它會返回未定義狀態,我只能假設它是因爲它已經進入了SIM功能而沒有完成每個循環

是否有無論如何我可以讓sim函數等待運行,直到每個循環完成?

注意:有更多的代碼比這個,但我試圖簡化......讓我知道如果有什麼不清楚。我最終會運行一系列的SIM功能,這就是爲什麼我想這樣設置它

感謝您的任何幫助!

+6

我假設'get_probs'或者其他一些代碼正在發出一個AJAX請求,或者做一些其他的異步操作。 – 2012-04-11 01:32:13

+0

這是正確的。我只是將它切換到同步運行(async:false),它看起來正在工作......有沒有其他方式來做到這一點,所以我不鎖定瀏覽器一兩秒? – 2012-04-11 06:33:48

+1

無論代碼依賴於AJAX響應,都應該從'success:'回調中執行。一種選擇是*傳遞函數作爲'get_probs' *的參數(假設這是AJAX所在的位置)*,然後在回調中調用該函數,並將響應傳遞給它。否則,您可以將代碼硬編碼到回調中,而不是傳遞一個函數。 – 2012-04-11 14:33:58

回答

0

.each循環應該按順序運行,沒有任何操作需要執行,直到完成。

如何運行此代碼:

sim(prob); 

function sim(prob){ 
    //alert ("test"); 
    alert (prob[value]); 
    new_sim(prob[value]); 
} 

內get_probs的成功回調,同步Ajax調用從來沒有答案。

+1

另外值得一提的是,對於所有的意圖和目的,JavaScript是單線程的,所以你真的不用擔心處理過程會走向歧途(Ajax調用) – 2012-04-11 01:32:36

+0

除非在這種情況下,它看起來像'get_probs'函數執行AJAX調用,所以每個循環都很快(啓動AJAX調用),然後在AJAX調用返回之前運行'sim()'。 – 2012-04-11 03:47:18

+0

ya,正如我上面評論的那樣,在get_probs中有一個ajax調用,我將它設置爲async:false並且它可以工作,但這並不理想,因爲它會將瀏覽器鎖定一兩秒鐘。有另一種方法嗎? – 2012-04-11 06:35:02

相關問題