在$ .when中使用动态变量

时间:2016-06-15 11:32:52

标签: javascript jquery jquery-deferred

如何在$ .when内使用动态延迟?有一个函数ajaxFunction,它返回延期的承诺。

function ajaxFunction(image){
    var dfd = $.Deferred();
    //Ajax of image
    return dfd.promise();
}

根据动态条件调用此ajaxFunction,如

var defs = {};
var someQuerySelector = document.querySelectorAll('image');
for (var i = 0; i < someQuerySelector.length; i++) {
    defs[d + 'i'] = ajaxFunction(someQuerySelector[i]);
}

现在我想将这些内容用于$.when()如何在defs内部使用$.when(defs['d1'],defs['d2'])动态密钥。如何使用动态变量。任何方法或帮助的变化都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

如果您将defs更改为数组,则可以apply()将其更改为$.when,如下所示:

var defs = [];
var someQuerySelector = document.querySelectorAll('image');
for (var i = 0; i < someQuerySelector.length; i++){
  defs.push(ajaxFunction(someQuerySelector[i]));
}

$.when.apply(this, defs).done(function() {
    // all complete, do something...
});

或纯粹在jQuery中:

var defs = $('image').map(function() {
    return ajaxFunction(this);
});

$.when.apply(this, defs).done(function() {
    // all complete, do something...
});

以上假设您将image更改为有效选择器,并且您正在为ajaxFunction()提供一些参数,否则会以相同的方式重复调用N次非常多余。< / p>