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不是很有用,因为如果您事先知道有多少延迟调用,您可以轻松地自己编写代码。