3

这是我第一次使用$.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;
}

不幸的是,我的实现出了点问题,我无法弄清楚我哪里出错了。我最好的猜测是返回一个Deferreds数组时出了点问题

更新:
在 lanzz 提到我的人为示例已经返回一个 Deferred 之后,我更新了代码,我更新了我的示例以包含doSomeWork

4

1 回答 1

15

是的,我也偶然发现了这一点:when不容易允许传递一个数组。但是您可以使用它apply来达到预期的效果。

$.when.apply($, getCustomerDataCalls(customerIds))
于 2012-06-05T08:07:43.123 回答