2011-12-16 12 views
0

私は、$.getJSON私は持っている2つを同期するためにjQuery $.when関数を使用しています。両方の呼び出しからのデータをマージするとうまくいきますが、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'に渡すコールバックの中で結果を処理したり、コールバックの中から呼び出された関数に渡したりする必要があります。 –

+2

通常、 '$ .fn'関数を直接呼び出すことはありません。 – pimvdb

答えて

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

これは非同期です。あなたはそれを返すことはできません。

代わりに、コールバックを使用して値を戻す必要があります。

関連する問題