1

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

就像是:

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

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

但这不起作用,写入控制台的唯一内容是“完成!”。我阅读了以下内容如何使用 jQuery Deferreds 数组?,但以下行为相同:

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

那里有什么问题?谢谢。

4

1 回答 1

3

您的输入$.when不是 type 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();
});
于 2013-02-18T07:10:04.410 回答