Javascript 正在等待所有异步ajax调用完成,但延迟了.when().then(),没有调用then()中的任务

Javascript 正在等待所有异步ajax调用完成,但延迟了.when().then(),没有调用then()中的任务,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个进行ajax调用的方法,这个方法从另一个函数被多次调用,因此最终进行了多次ajax异步调用。我只需要在所有异步ajax调用完成后执行某些任务 var makeAjaxCall = function() { var ret = new $.Deferred(); $.ajax({ type: 'GET', url: url, dataType: 'json' }) .done(function(data, textStatus, jqXH

我有一个进行ajax调用的方法,这个方法从另一个函数被多次调用,因此最终进行了多次ajax异步调用。我只需要在所有异步ajax调用完成后执行某些任务

var makeAjaxCall = function() {
var ret = new $.Deferred();
$.ajax({
      type: 'GET',
      url: url,
      dataType: 'json'
    })
    .done(function(data, textStatus, jqXHR) {
      //do stuff
      ret.resolve(data);
    })
    .fail(function(jqXHR, textStatus) {
     // do stuff
    })
    .always(function() {
      //do stuff
    });

    return ret;
  };
$.when(makeAjaxCall()).then(function(ret) {
        // perform the task
      });
这个函数从遍历对象的for循环调用

var items = ['a', 'b', 'c'];

  for (var i = 0; j < items.length; j++) {
    makeAjaxCall();
}

问题是,没有调用deferred.when()中的“then”部分,并且没有执行该任务。我遗漏了什么?

$。ajax已经返回了一个承诺,当它成功完成时会得到解决,因此您不需要额外的延迟。只需
返回$.ajax

接受可变参数时——所有延迟,但不是数组。如果要使用数组,必须使用
.apply

var arrayOfPromises = items.map(item => {
    // Do you need to pass in `item` or something?
    return makeAjaxCall();
});
$.when.apply($, arrayOfPromises).then(() => {
    // perform task
});

我尝试了你的建议,但它不起作用。不确定我遗漏了什么。这是我第一次用jquery编码,所以如果我的问题听起来很愚蠢,请原谅。我所做的ajax调用不会一直成功,有失败的机会。因此,我仍然希望执行when().then()中的任务,而不管它是否成功。出于调试目的,我在then()中进行了失败回调,但它仍然没有被命中。