一旦解决了所有延迟对象,就提高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
将在它们全部解析后执行。
我认为问题是$.each
返回你的dataArray
,而不是像你想要提供给$.each
的Deferred
对象列表。