以编程方式构造参数时构造jquery延迟对象

时间:2012-11-20 18:30:09

标签: jquery jquery-deferred

我是javascript和jquery的新手,我正在学习如何使用jquery的Deferred对象在执行操作之前等待循环完成。循环内的函数不需要以任何特殊顺序调用。换句话说,函数n不依赖于函数n-1的结果,所以我不是将它们与管道链接在一起。

到目前为止,我有这个,有效:

// wait some random amount of time, then log a message
// and resolve the Deferred object
function doTask(id) {
  var defer = $.Deferred();
  setTimeout(function() {
    console.log(id + " finished!");
    defer.resolve(id);
  }, Math.random()*1000);
  return defer.promise();
}

// log when these three independent tasks complete
$.when( doTask("foo1"), doTask("foo2"), doTask("foo3")).done(function() {
    console.log(" ... all done in no particular order!");
});

但是我想以编程方式为$ .when构造参数列表。我该怎么做?

1 个答案:

答案 0 :(得分:2)

创建一个数组并将其应用于$.when

var defArr = [];

defArr.push(doTask("foo1"));
defArr.push(doTask("foo2"));
defArr.push(doTask("foo3"));

$.when.apply(null,defArr).done(function(){
    console.log(" ... all done in no particular order!");
});