【问题标题】:Using dynamic variables in $.when在 $.when 中使用动态变量
【发布时间】:2016-06-15 11:32:52
【问题描述】:

如何在 $.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'])。如何在其中使用动态变量。任何方法或帮助的改变都将受到高度赞赏。

【问题讨论】:

    标签: javascript jquery jquery-deferred


    【解决方案1】:

    如果您将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 次是非常多余的。

    【讨论】:

    • 是的,我使用图像作为参数。也更新了问题
    • $.when.apply(null, defs) 这对我有用 :) 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多