web-dev-qa-db-ja.com

完了/完了時に$ .each json配列で.promise()。done()を使用する方法

$ .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()があるわけではありませんか?
  • $。each配列が完了したことをどのように知ることができますか?
  • someArray$ someArrayに変更して使用できますか?
18
paocom

ご存知のように、$.each()には.promise()がないため、従来の方法では実行できません。代わりに、$.when()を使用して、Ajax関数のグループによって返される一連のpromiseがすべて解決された時期を追跡できます。

_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
});
_
38
jfriend00