jquery с использованием $ .deferred - PullRequest
0 голосов
/ 16 декабря 2011

Я использую функцию 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 в вызывающую функцию, я знаю, что асинхронные вызовы вызывают такое поведение, поэтому мне просто нужен шаблон, который решает проблему. Благодаря.

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Передайте функцию обратного вызова в 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 голосов
/ 16 декабря 2011

Это асинхронно;вы не можете его вернуть.

Вместо этого вам необходимо передать значение обратно с помощью обратного вызова.

...