Javascript 正在等待所有异步ajax调用完成,但延迟了.when().then(),没有调用then()中的任务
我有一个进行ajax调用的方法,这个方法从另一个函数被多次调用,因此最终进行了多次ajax异步调用。我只需要在所有异步ajax调用完成后执行某些任务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
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()中进行了失败回调,但它仍然没有被命中。