$.when.apply для возврата наборов результатов?

Мне было интересно, можно ли вернуть результат вызова $.when.apply($, Requests[]) после завершения всех запросов в массиве вызовов ajax?

Я использовал:

$.when($.ajax(...)).done(function(data){ console.log(data.d); }

Что позволяет мне работать с результатом вызова ajax. Как применить ту же концепцию к $.when.apply($, Requests[])? Я пробовал $.when.apply($, Requests[]).then(function(data?){ console.log(data.d); }, но это не работает. Любые идеи?

По сути, я пытаюсь запустить переменное количество похожих вызовов ajax и работать с их результатами после их завершения. Буду признателен за любые подсказки в правильном направлении!

Изменить: Уточнение. Я устанавливаю Requests[] как массив, содержащий запрос ajax. Пример:

var Requests = [];
for (var i = 0; i <= 10; i++){ Requests.push($.ajax({...ajax setup...}));
$.when.apply($, Requests).then(function(...){ do Stuff with the result of all });

person Mario Karl Tacke    schedule 01.10.2013    source источник
comment
@KevinB это похоже на массив объектов jqxhr   -  person Arun P Johny    schedule 01.10.2013
comment
@KevinB, я думаю, обновление проясняет ситуацию   -  person Arun P Johny    schedule 01.10.2013
comment
Я добавил [] внутри функции, чтобы уточнить, что это массив. Я отредактировал свой вопрос. Спасибо!   -  person Mario Karl Tacke    schedule 01.10.2013
comment
затем then обратный вызов получает переменное количество аргументов в зависимости от количества промисов, переданных функции when   -  person Arun P Johny    schedule 01.10.2013
comment
это работает, когда я знаю количество переданных запросов, не могли бы вы привести пример кода, пожалуйста?   -  person Mario Karl Tacke    schedule 01.10.2013


Ответы (1)


Обратный вызов then получает переменное количество аргументов в зависимости от количества переданных ему промисов.

В этом случае, поскольку обещания ajax передаются, каждый из аргументов представляет собой массив, содержащий 3 элемента данных, статус и объект jqxhr.

Поэтому вам нужно использовать приведенный ниже синтаксис, чтобы получить результат первого запроса.

then(function(result1){
    console.log(result[0].d)
})

распечатать результаты всех запросов

then(function (result1) {
    $.each(arguments, function (idx, args) {
        console.log(args[0]);// in your case args[0].d
    })
})

Демонстрация: Fiddle

person Arun P Johny    schedule 01.10.2013
comment
Отлично, это очень чистое и рабочее решение! Очень признателен! - person Mario Karl Tacke; 01.10.2013