JQuery – $ .when 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数组时出错了

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

是的,我也偶然发现了这个问题: when时候不容易传递数组。 但您可以使用apply来实现所需的结果。

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