Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $.when.apply.done未执行异步函数_Javascript_Jquery_Ajax_Asynchronous_.when - Fatal编程技术网

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);