【发布时间】:2012-06-05 08:03:06
【问题描述】:
这是我第一次使用$.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
【问题讨论】:
-
你不需要为每个
$.get()调用实例化一个新的Deferred——$.get()已经返回了一个你可以使用的承诺 -
var dfds = new[];是错字吗? -
@F.Calderan 确实是错字,感谢您的纠正。