Повышение jquery отложен. then() после того, как все отложенные объекты были разрешены
У меня есть две функции javascript, save()
и saveAll()
, настроенные как показано ниже:
function save(data) {
return $.post('/save', data);
}
function saveAll(callback) {
var dataArray = [];
$.each(dataArray, function() {
save(this);
});
callback();
}
Меня интересует модификация saveAll()
, так что он использует jquery отложенные объекты и вызывает функцию callback
после завершения всех операций save()
. однако я не уверен в точном синтаксисе... особенно в отношении $.each() внутри $.when(). это будет что-то вроде этого?
function saveAll(callback) {
var dataArray = [];
$.when(
$.each(dataArray, function() {
return save(this);
})
).then(callback);
}
Ответы
Ответ 1
как указал Эли, $.when() принимает список аргументов, разделенных запятыми, а не массив. использование Function.apply()
для передачи в массиве, похоже, делает трюк.
function saveAll(callback) {
var dataArray = [], deferreds = [];
$.each(dataArray, function() {
deferreds.push( save() );
});
$.when.apply(window, deferreds).then(callback);
}
Ответ 2
Вы должны иметь возможность передавать список отложенных объектов, разделенных запятыми, на $.when
, а .then
будет выполняться после их разрешения.
http://api.jquery.com/jQuery.when/
Ответ 3
Проблема, о которой я думаю, заключается в том, что $.each
возвращает ваш dataArray
, а не список объектов Deferred
, которые вы хотите передать в $.when
.