业务场景:
如下图多选列表,批量选择不定项后,对每一项进行ajax异步调用:
等待各项结束后,对调用结果汇总弹出modal页面展示批量结果。
实现代码:
var defers = []; $.each(checkRows, function (index, item) { var deferred = $.Deferred(); $.post(url, data, function (ret) { // ... 其他处理 $.extend(item, ret); deferred.resolve(item); }); defers.push(deferred.promise()); }); $.when.apply(this, defers).done(function (...rets) { var callResults = []; $.each(rets, function (index, ret) { // ... 其他处理 callResults.push(ret); }); // ... 弹出modal页面 });
实现说明:
$.when.apply(this, defers).done(function (...rets)
$.when接受一个或多个延迟对象,此处在延迟对象数量不定的情况下,使用apply函数接收数组参数;
...rets参数为es6中的不定参数,接收延迟对象的解决值;