Javascript Jquery deferred-done不等待解析()

Javascript Jquery deferred-done不等待解析(),javascript,jquery,ajax,asynchronous,jquery-deferred,Javascript,Jquery,Ajax,Asynchronous,Jquery Deferred,我需要做一些异步ajax调用,在每次调用结束时,我将一个数字推送到一个数组中,当所有ajax调用完成后,我用这个数组调用回调函数。但我不知道怎么做 因此,我尝试在代码中实现延迟方法,如图所示 结果是这样的: function uploader(uploads, cb) { var def = []; var reslist = []; $.each(uploads,function(key,value){ if(!value.sync){ def.push

我需要做一些异步ajax调用,在每次调用结束时,我将一个数字推送到一个数组中,当所有ajax调用完成后,我用这个数组调用回调函数。但我不知道怎么做

因此,我尝试在代码中实现延迟方法,如图所示

结果是这样的:

function uploader(uploads, cb) {
  var def     = [];
  var reslist = [];
  $.each(uploads,function(key,value){
    if(!value.sync){
      def.push(_upload(value));
    }
  });
  function _upload(upload){
    var dfd = $.Deferred();
    getAntrag(upload.timestamp, function(json) {
      $.ajax({
        url: 'http://api.***.com/',
        type: "POST",
        data: {
          customer: json
        },
        async: false,
        success: function(msg) {
          try {
            var res = JSON.parse(msg);
          } catch (err) {
            dfd.reject();
          }

          if (res.mldgcode === '0000') {
            reslist.push(res.data.ident);
            dfd.resolve();

          } else {
            dfd.reject();
          }

        }
      });
    });
    return dfd.promise();
  }
  $.when.apply($,def).done(function(){
    console.log('all done');
    cb(reslist);
  });
  $.when.apply($,def).fail(function(args){
    console.log('failargs',args);
    cb(args);
  });
}
因此,现在在我的dfd.resolve之前调用done处理程序


我在这里错过了什么?

试试$.whendef.doneh你怎么知道何时执行dfd.resolve,你在那里放了日志了吗?为什么要使用async:false???@Bergi是的,我认为async:false不重要,但我在没有它的情况下测试了它-没有变化,这真的很奇怪,看起来它应该可以工作。您能否在调用$之前记录def的值。何时?