How to use .promise().done() on $.each json array when done/completed?

后端 未结 1 818
暖寄归人
暖寄归人 2021-02-04 04:12

I want to perform some action when $.each is done.

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

    //---------some async ajax action here per loop ---------
             


        
1条回答
  •  时光说笑
    2021-02-04 04:38

    As you've figured out, $.each() doesn't have a .promise() so you can't do it the way you were trying to. Instead, you can use $.when() to track when a bunch of promises returned by a group of Ajax functions have all been resolved:

    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
    });
    

    Or, rather than your $.each(), it's a bit cleaner to use .map():

    $.when.apply($, someArray.map(function(item) {
        return $.ajax({...}).then(function(data){...});
    })).then(function() {
        // all ajax calls done now
    });
    

    0 讨论(0)
提交回复
热议问题