2011-12-16 36 views
0

我正在使用jQuery $.when函數來同步我擁有的兩個$.getJSON異步調用。合併來自兩個調用的數據現在工作正常,但是我想返回合併的內容,這是一個jQuery對象數組。

我試圖實現這個使用$.when函數包裹另一個函數,其中包含代碼,我同步我的異步調用。我的代碼如下所示:

$.fn.getResultFromMergedJsonCalls = function(params){ 
    $.when( 
    $.fn.jsonCall1(params), $.fn.jsonCAll2(params) 
    ).then(function(){ 
     var mergedData = mergeResults(resultOfJsonCAll1,resultOfJsonCAll2) 
      return mergedData; 
    }); 
    }; 
) 

我怎樣才能在mergedData數組的內容返回到調用函數,我知道異步調用的性質是造成這種行爲,所以我只需要的是解決問題的模式。謝謝。

+0

你不能。它是異步的。你必須在你傳遞給`.then`的回調中處理結果,或者將它傳遞給在回調中調用的函數。 – 2011-12-16 14:32:01

回答

3

將回調函數傳遞給getResultsFromMergedJsonCalls,然後調用then處理程序的回調。例如:

$.fn.getResultFromMergedJsonCalls = function(params, success){ 
$.when( 
$.fn.jsonCall1(params), $.fn.jsonCAll2(params) 
).then(function(){ 
    if (success) { 
     var mergedData = mergeResults(resultOfJsonCAll1,resultOfJsonCAll2); 
     success(mergedData); 
}); 

};

getResultsFromMergedJsonCalls的調用者當然必須實現一個合適的函數作爲新的回調參數傳遞。

2

這是異步的;你不能退還。

相反,您需要使用回調函數將值傳遞回去。

相關問題