在循环中的ajax完成后,Jquery调用另一个函数

我有一个在循环内运行的ajax函数,它依赖于数组中的项目数量。 在完成ajax调用之后和循环之外,如何运行另一个函数? 可能吗?

这是function

function downloadAll(){ downloads = []; $.each(checked, function(key, value) { $.ajax({ method: "POST", url: "data['controller'].'/Download/'); ?>", data:'id='+value, beforeSend: function () { $('.loading').show(); }, success: function(data){ downloads.push(data); $('.loading').fadeOut("slow"); }, }); }); processZip(downloads); } 

让我们在所有调用成功之后开始,这很容易:

 success: function(data){ downloads.push(data); $('.loading').fadeOut("slow"); if(downloads.length===checked.length){//suppose checked is array like alert("finish"); } }, 

循环之外更难,因为它实际上不是一个循环,它需要一些修改。 你基本上想要等待多个Promises(Promise.all):

 Promise.all(checked.map(function(value){ return Promise(function(resolve){ $.ajax({... ,success:resolve}); }); })).then(function(downloads){ console.log("finished",downloads); });