【发布时间】:2015-01-29 09:08:26
【问题描述】:
在所有异步函数执行完毕后,我必须执行一个回调函数。
为此,我创建了一个包含异步函数的数组:
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");
}
});
【问题讨论】:
-
你应该将
$.ajax()返回的承诺转发给你的调用者。换句话说,return $.ajax({ /* ... */ });。另请注意,您问题中的代码包含语法错误。 -
1.代码有错误。 2.尝试在函数中
$.ajax之前添加console.log( "Function called" );。 -
编辑修复了您没有调用函数的事实,但您仍然需要按照@FrédéricHamidi 的建议进行操作,并在示例函数中返回
$.ajax的结果。 -
现在函数正在运行,但是在所有函数完成执行之前,首先调用回调函数,而不是最后调用。
-
@rohinichaudhary 请将新代码添加到您的问题中(不要删除旧代码),以便我们看到您现在拥有的内容。
标签: javascript jquery ajax asynchronous .when