JQuery - $ .when Deferred对象数组的语法

时间:2012-06-05 08:03:07

标签: jquery syntax deferred

这是我第一次使用$.when而我的语法有问题。
我的代码类似于下面的简化示例。它工作(如果我简化时没有引起错误)。 我的问题是,我不知道customerIds数组将包含的许多元素。

var customerIds = new [1, 2, 3];

$.when(
    getCustomerData(customerIds[0]),
    getCustomerData(customerIds[1]),
    getCustomerData(customerIds[2])
).then(function() {
    alert('success');
}).fail(function() {
    alert('error');
});

function getCustomerData(int id) {
    return new $.Deferred(function(defer) {
                    doSomeWork(id, defer);
    }).promise();       
}

我想写下$.when语句如下,但很难正确理解语法。

$.when(
    getCustomerDataCalls(customerIds),
).then(function() {
    alert('success');
}).fail(function() {
    alert('error');
});

getCustomerDataCalls实施为:

function getCustomerDataCalls(customerIds) {
    var dfds = [];

    for (var id in customerIds) {
        dfds.push(new $.Deferred(function(defer) {
                                    doSomeWork(id, defer);
                                 }).promise());     
    }

    return dfds;
}

不幸的是我的实施有问题,我无法解决我出错的地方。我最好的猜测是,在返回Deferred s

数组时会出现问题

更新:
在lanzz提到我的设计示例已经返回Deferred时,我更新了代码,我更新了我的示例以包含doSomeWork

1 个答案:

答案 0 :(得分:15)

是的,我也偶然发现了这一点:when不容易传递数组。但您可以使用apply来获得所需的结果。

$.when.apply($, getCustomerDataCalls(customerIds))