$.when.apply.done 没有执行异步函数
$.when.apply.done not executing asynchronous functions
我必须在所有异步函数执行完毕后执行一个回调函数。
为此,我创建了一个包含异步函数的数组:
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");
});
现在函数异步执行,但回调函数在函数执行完成之前被调用。
我推送的 ajax 函数示例之一:
functions.push(function () {
return $.ajax({
url: "some url",
success: function(){
console.log("Finished execution");
}
});
你的匿名函数没有 return
所以它的有效 return 值是 undefined
.
因此,首先您需要修复您的匿名函数以包含 return
:
functions.push(function() {
return $.ajax(...);
});
您还可以更清晰地实现调用循环:
var requests = functions.map(function(f) {
return f();
});
$.when.apply($, requests).done(callb);
我必须在所有异步函数执行完毕后执行一个回调函数。
为此,我创建了一个包含异步函数的数组:
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");
});
现在函数异步执行,但回调函数在函数执行完成之前被调用。
我推送的 ajax 函数示例之一:
functions.push(function () {
return $.ajax({
url: "some url",
success: function(){
console.log("Finished execution");
}
});
你的匿名函数没有 return
所以它的有效 return 值是 undefined
.
因此,首先您需要修复您的匿名函数以包含 return
:
functions.push(function() {
return $.ajax(...);
});
您还可以更清晰地实现调用循环:
var requests = functions.map(function(f) {
return f();
});
$.when.apply($, requests).done(callb);