Using an array of deffered with jQuery.when()

2019-06-06 03:05发布

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.

Something like:

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

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

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!")
});

What's wrong there? Thanks.

1条回答
干净又极端
2楼-- · 2019-06-06 03:17

Your inputs to $.when aren't of type Deferred, which is the expected input type for the function - http://api.jquery.com/jQuery.when/

At the simplest level, you could construct Deferred types with your functions as the beforeStart construction parameters. Like:

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

Here's a working fiddle: http://jsfiddle.net/6MeM5/

Additionally:

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();
});
查看更多
登录 后发表回答