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

Phi*_*rie 3 syntax jquery 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();       
}
Run Code Online (Sandbox Code Playgroud)

我想写下$.when如下声明,但很难获得正确的语法.

$.when(
    getCustomerDataCalls(customerIds),
).then(function() {
    alert('success');
}).fail(function() {
    alert('error');
});
Run Code Online (Sandbox Code Playgroud)

在哪里getCustomerDataCalls实施为:

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

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

    return dfds;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是我的实施出了问题,我无法解决我出错的地方.我最好的猜测是返回一个Deferreds 数组时出错了

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

Rap*_*ert 15

是的,我也偶然发现了这个问题:when不容易传递数组.但是你可以用它apply来达到预期的效果.

$.when.apply($, getCustomerDataCalls(customerIds))
Run Code Online (Sandbox Code Playgroud)