这是我第一次使用$.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))
关于JQuery - 延迟对象数组的 $.when 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893668/