JQuery – $ .when 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(); }
我想编写$.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))