完成/完成后如何在$ .each json数组上使用.promise()。done()?

时间:2014-06-30 07:06:49

标签: jquery promise each

我想在$ .each完成时执行一些操作。

$.each(someArray, function(index, val) {

    //---------some async ajax action here per loop ---------
    $.ajax({...}).done(function(data){...});

}.promise().done(function(){...}); //<-------error here can't use with $.each
  • 并非每个 jQuery函数都有promise()
  • 我如何知道 $。每个数组何时完成?
  • 我可以将 someArray 更改为 $ someArray 来使用它吗?

1 个答案:

答案 0 :(得分:35)

正如您所知,$.each()没有.promise()所以您无法按照自己的方式去做。相反,您可以使用$.when()来跟踪一组Ajax函数返回的一堆promises何时都已解决:

var promises = [];
$.each(someArray, function(index, val) {
    //---------some async ajax action here per loop ---------
    promises.push($.ajax({...}).then(function(data){...}));
});
$.when.apply($, promises).then(function() {
    // code here when all ajax calls are done
    // you could also process all the results here if you want
    // rather than processing them individually
});

或者,使用$.each()而不是.map(),而不是$.when.apply($, someArray.map(function(item) { return $.ajax({...}).then(function(data){...}); })).then(function() { // all ajax calls done now });

{{1}}