一旦解决了所有延迟对象,就提高jquerydeferred.then()

我有两个javascript函数, save()saveAll() ,设置如下:

 function save(data) { return $.post('/save', data); } function saveAll(callback) { var dataArray = []; $.each(dataArray, function() { save(this); }); callback(); } 

我有兴趣修改saveAll()以便它利用jquery延迟对象,并在所有save()操作完成后引发callback函数。 但是,我不确定确切的语法…特别是与$ .when()内部的$ .each()有关。 会是这样的吗?

 function saveAll(callback) { var dataArray = []; $.when( $.each(dataArray, function() { return save(this); }) ).then(callback); } 

正如Eli指出的那样,$ .when()接受逗号分隔的参数列表而不是数组。 使用Function.apply()传入数组似乎可以解决问题。

 function saveAll(callback) { var dataArray = [], deferreds = []; $.each(dataArray, function() { deferreds.push( save() ); }); $.when.apply(window, deferreds).then(callback); } 

您应该能够将逗号分隔的延迟对象列表传递给$.when.then将在它们全部解析后执行。

http://api.jquery.com/jQuery.when/

我认为问题是$.each返回你的dataArray ,而不是像你想要提供给$.eachDeferred对象列表。