Phi*_*rie 3 syntax jquery 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();
}
Run Code Online (Sandbox Code Playgroud)
我想写下$.when如下声明,但很难获得正确的语法.
$.when(
getCustomerDataCalls(customerIds),
).then(function() {
alert('success');
}).fail(function() {
alert('error');
});
Run Code Online (Sandbox Code Playgroud)
在哪里getCustomerDataCalls实施为:
function getCustomerDataCalls(customerIds) {
var dfds = [];
for (var id in customerIds) {
dfds.push(new $.Deferred(function(defer) {
doSomeWork(id, defer);
}).promise());
}
return dfds;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我的实施出了问题,我无法解决我出错的地方.我最好的猜测是返回一个Deferreds 数组时出错了
更新:
我在lanzz提到我的设计示例已经返回Deferred之后更新了代码,我更新了我的示例以包含doSomeWork
Rap*_*ert 15
是的,我也偶然发现了这个问题:when不容易传递数组.但是你可以用它apply来达到预期的效果.
$.when.apply($, getCustomerDataCalls(customerIds))
Run Code Online (Sandbox Code Playgroud)