0

jQuery$.when関数を使用して、2つの$.getJSON非同期呼び出しを同期しています。両方の呼び出しからのデータのマージは正常に機能するようになりましたが、jQueryオブジェクトの配列であるマージの内容を返したいと思います。

$.when非同期呼び出しを同期するコードを含む別の関数をラップした関数を使用して、これを実現しようとしています。私のコードは次のようになります:

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

mergedData配列の内容を呼び出し元の関数に戻すにはどうすればよいですか。非同期呼び出しの性質がこの動作を引き起こしていることがわかっているので、問題を解決するパターンが必要です。ありがとう。

4

2 に答える 2

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の呼び出し元は、その新しいコールバック引数として渡すための適切な関数を実装する必要があります。

于 2011-12-16T14:35:14.367 に答える
2

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

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

于 2011-12-16T14:31:35.107 に答える