JQuery-$。延迟对象数组的语法

JQuery-$。延迟对象数组的语法,jquery,syntax,deferred,Jquery,Syntax,Deferred,这是我第一次使用$。当和我在语法方面遇到困难时 我的代码类似于下面的简化示例。它可以工作(如果我在简化它时没有引起错误的话)。 我的问题是我不知道customerID数组将包含多少元素 var customerIds = new [1, 2, 3]; $.when( getCustomerData(customerIds[0]), getCustomerData(customerIds[1]), getCustomerData(customerIds[2]) ).the

这是我第一次使用
$。当
和我在语法方面遇到困难时
我的代码类似于下面的简化示例。它可以工作(如果我在简化它时没有引起错误的话)。 我的问题是我不知道
customerID
数组将包含多少元素

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;
}
不幸的是,我的实现出了一些问题,我无法找出哪里出了问题。我最好的猜测是,当返回一个延迟的
数组时,出现了一些问题

更新:

在lanzz提到我的人造示例已经返回延迟后,我更新了代码,我更新了示例以包括
doSomeWork

是的,我也偶然发现:
不容易允许传递数组时。但是您可以使用
apply
来实现所需的结果

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

您不需要为每个
$实例化一个新的
延迟的
。get()
调用-
$。get()
已经返回了一个承诺,您可以使用
var dfds=new[]
是一个拼写错误吗?@F.Calderan确实是一个拼写错误,谢谢你纠正我。在我看来,默认情况下,什么时候应该提供这种行为——也就是说,如果第一个参数是数组,第二个参数是函数,那么当数组中的所有内容都完成后,用结果数组调用函数。事实上,when不是很有用,因为如果您事先知道有多少延迟调用,您可以轻松地自己编写代码。