我正在使用$.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!")
});
那里有什么问题? 感谢。
答案 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();
});