我有两个JavaScript函数,save()和saveAll(),设置如下:
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()有关。会是这样吗?
callback
function saveAll(callback) { var dataArray = []; $.when( $.each(dataArray, function() { return save(this); }) ).then(callback); }
正如Eli指出的那样,$ .when()接受用逗号分隔的参数列表,而不是数组。使用Function.apply()传递数组似乎可以解决问题。
Function.apply()
function saveAll(callback) { var dataArray = [], deferreds = []; $.each(dataArray, function() { deferreds.push( save() ); }); $.when.apply(window, deferreds).then(callback); }