javascript - $.when.apply.done 不执行异步函数

标签 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(null, requests).done(function(){
    console.log("Hello");
});

现在函数是异步执行的,但是回调函数在函数执行完成之前被调用。

我推送的ajax函数的一个例子:

functions.push(function () {
  return $.ajax({
    url: "some url",
    success: function(){
    console.log("Finished execution");
  }
});

最佳答案

您的匿名函数没有return,因此它的有效返回值为undefined

因此,首先您需要修复您的匿名函数以包含一个return:

functions.push(function() {
     return $.ajax(...);
});

您还可以更清晰地实现调用循环:

var requests = functions.map(function(f) {
    return f();
});

$.when.apply($, requests).done(callb);

关于javascript - $.when.apply.done 不执行异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210730/

相关文章:

jquery:有没有办法在渲染之前猜测高度?

jquery - 有没有一个jQuery插件可以满足我对多表单验证的要求?

页面 onload 上的 Javascript ajax 调用

javascript - jquery 单击切换上一个和下一个

javascript - 每次单击 "getLatestPrice"按钮时,如何更新某些 ChainLink 聚合器提供的数据?

javascript - JQuery - 同一页面上的多个版本 - 破坏功能

javascript - rails : How to escape_javascript with client-side AJAX request

json - Google Chrome 60.0.3112.90 VueJS response.data 错误

javascript - 为什么我得到 "Invalid assignment on left-hand side"?

javascript - 为什么此桌面通知代码在 Chrome 中不起作用