我有两个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()
函数。但是,我不确定确切的语法...特别是与$ .when()内部的$ .each()有关。它会是这样的吗?
function saveAll(callback) {
var dataArray = [];
$.when(
$.each(dataArray, function() {
return save(this);
})
).then(callback);
}
答案 0 :(得分:21)
Function.apply()
传入数组似乎可以解决问题。
function saveAll(callback) {
var dataArray = [], deferreds = [];
$.each(dataArray, function() {
deferreds.push( save() );
});
$.when.apply(window, deferreds).then(callback);
}
答案 1 :(得分:1)
您应该能够将逗号分隔的延迟对象列表传递给$.when
,.then
将在所有已解决后执行。
答案 2 :(得分:1)
我认为问题是$.each
正在返回您的dataArray
,而不是Deferred
个对象的列表,就像您想要提供给$.when
一样。