我有一个延迟对象数组,我怎么能用jQuery.when呢?它不需要数组

时间:2012-02-04 01:06:06

标签: javascript jquery jquery-deferred

var promises = [promise1, promise2, promise3... promiseN];

我该如何使用?

$.when(promise1(), promise2(), promise3(), ...promiseN()).then(function(){ doSomething()});

我宁愿传递数组......任何想法我怎么能正确地做到这一点?显然这不起作用。

 $.when(promises).then(function(){ doSomething()});
奇怪地完成,失败,总是都接受数组。

谢谢, 〜CK

2 个答案:

答案 0 :(得分:7)

我不熟悉$.when()但你应该能够使用javascript函数apply()做你想做的事。有点像:

$.when.apply($, promises).then(function(){ doSomething()});

第一个参数是在函数调用中绑定到“this”的内容(类似于$.proxy()在jquery中的内容),第二个参数是传递给函数的参数数组。

例如:

myobj.myfunc.apply(myobj, [1,2,3]);
//is the same as
myobj.myfunc(1,2,3);

答案 1 :(得分:0)

我可以确认这适用于骨干提取和jQuery $ .when()。在这样的情况下非常有用:

fetchPromises = [];
for (key in this.dataSources) {
  source = this.dataSources[key];
  fetchPromises.push(source.fetch());
}
$.when.apply($, fetchPromises).done(this_countResults) // Do something with all the returned results