问题描述
我正在使用$.when
在其他一些逻辑之前运行2个函数.现在,在某些情况下,在执行相同逻辑之前,我需要运行一组不同的函数,因此我想将一组函数传递给$.when
,但无法使其运行.
I'm using $.when
to run 2 functions prior to some other logic. Now, in several cases I need to run a different set of functions prior to doing that same logic, so I wanted to pass an array of the functions to $.when
, but couldn't make it run.
类似的东西:
function funcA(){
console.log("funcA");
}
function funcB(){
console.log("funcB")
}
var funcArr = [funcA, funcB];
$.when(funcArr).then(function(){
console.log("DONE!");
});
但是这不起作用,唯一写入控制台的内容是完成!".我阅读了以下如何使用一系列jQuery Deferreds?,但以下行为相同:
But this doesn't work and the only thing written to the console is "DONE!".I read the following How do you work with an array of jQuery Deferreds?, but the following behaves the same:
$.when.apply($, funcArr).then(function(){
console.log("DONE!")
});
那是怎么了?谢谢.
推荐答案
您对$.when
的输入的类型不是Deferred
,这是该函数的预期输入类型- http://api.jquery.com/jQuery.when/
Your inputs to $.when
aren't of type Deferred
, which is the expected input type for the function - http://api.jquery.com/jQuery.when/
在最简单的级别上,您可以使用函数作为beforeStart
构造参数来构造Deferred
类型.喜欢:
At the simplest level, you could construct Deferred
types with your functions as the beforeStart
construction parameters. Like:
var funcArr = [$.Deferred(funcA), $.Deferred(funcB)];
这是一个有效的小提琴: http://jsfiddle.net/6MeM5/
Here's a working fiddle: http://jsfiddle.net/6MeM5/
此外:
如果您只是想执行功能数组中的每个功能,则不需要参与Deferred
.只需使用$.each
迭代数组即可,例如:
If you're just trying to execute each function in an array of functions, you don't need to get Deferred
involved. Just iterate the array using $.each
, like:
$.each(funcArr, function(){
this();
});
这篇关于在jQuery.when()中使用有延迟的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!