这是我第一次使用$.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
答案 0 :(得分:15)
是的,我也偶然发现了这一点:when
不容易传递数组。但您可以使用apply
来获得所需的结果。
$.when.apply($, getCustomerDataCalls(customerIds))