Javascript $.when.apply.done未执行异步函数
我必须在所有异步函数完成执行后执行回调函数。Javascript $.when.apply.done未执行异步函数,javascript,jquery,ajax,asynchronous,.when,Javascript,Jquery,Ajax,Asynchronous,.when,我必须在所有异步函数完成执行后执行回调函数。 为此,我创建了一个数组,其中包含异步函数: var funcs = []; var requests = []; 我在其中推出了一些ajax函数 这是我的解决方案,但不起作用: for(i = 0; i < functions.length; i++){ var f = functions[i](); //calling each ajax functions requests.push(f); } $.when.apply(
为此,我创建了一个数组,其中包含异步函数:
var funcs = [];
var requests = [];
我在其中推出了一些ajax函数
这是我的解决方案,但不起作用:
for(i = 0; i < functions.length; i++){
var f = functions[i](); //calling each ajax functions
requests.push(f);
}
$.when.apply(null, requests).done(function(){
console.log("Hello");
});
匿名函数没有
返回
,因此其有效返回值为未定义
因此,首先需要修复匿名函数,以包含一个返回:
functions.push(function() {
return $.ajax(...);
});
您还可以更清晰地实现调用循环:
var requests = functions.map(function(f) {
return f();
});
$.when.apply($, requests).done(callb);
您应该将$.ajax()
返回的承诺转发给调用方。换句话说,返回$.ajax({/*…*/})代码>。还要注意,问题中的代码包含语法错误。1。代码有错误。2.尝试添加console.log(“调用的函数”)
在函数中的$.ajax
之前。编辑已修复了您没有调用函数的事实,但您仍然需要按照@FrédéricHamidi的建议执行,并在示例函数中返回$.ajax
的结果。现在函数正在运行,但回调函数首先被调用,而不是最后被调用,在所有函数完成执行之前。@rohinichaudhary请将新代码添加到您的问题中(不删除旧代码),这样我们就可以看到您现在有什么了。我使用了return,仍然是相同的问题。现在ajax函数正在执行。但是.done
不是。是的,在添加后返回,代码中有一点变化,它现在可以工作了。谢谢大家的帮助:)
var requests = functions.map(function(f) {
return f();
});
$.when.apply($, requests).done(callb);