使用jQuery.when()延迟的数组

时间:2013-02-18 06:58:24

标签: jquery jquery-deferred .when

我正在使用$.when在其他逻辑之前运行2个函数。现在,在某些情况下,我需要在执行相同逻辑之前运行一组不同的函数,因此我想将函数数组传递给$.when,但无法使其运行。

类似的东西:

function funcA(){
    console.log("funcA");
}
function funcB(){
    console.log("funcB")
}
var funcArr = [funcA, funcB];

$.when(funcArr).then(function(){
    console.log("DONE!");
});

但这不起作用,写入控制台的唯一内容就是“DONE!”。 我阅读了以下How do you work with an array of jQuery Deferreds?,但以下内容表现相同:

$.when.apply($, funcArr).then(function(){
    console.log("DONE!")
});

那里有什么问题? 感谢。

1 个答案:

答案 0 :(得分:3)

您对$.when的输入不属于Deferred类型,这是该函数的预期输入类型 - http://api.jquery.com/jQuery.when/

在最简单的级别,您可以使用您的函数构造Deferred类型作为beforeStart构造参数。像:

var funcArr = [$.Deferred(funcA), $.Deferred(funcB)];

这是一个工作小提琴:http://jsfiddle.net/6MeM5/

<强>此外:

如果您只是尝试在函数数组中执行每个函数,则不需要涉及Deferred。只需使用$.each迭代数组,例如:

$.each(funcArr, function(){
    this();
});