使用带有可变函数数组的$ .when()

时间:2014-01-25 16:30:59

标签: javascript jquery

我想使用when()来控制多个AJAX调用的完成,例如:

$.when(
    $.ajax( "test.aspx" ),
    $.ajax( "test2.aspx" ),
    ...
).then(...);

最后,我想将$ .when与来自变量数组的函数调用的结果一起使用。我不知道怎么做。

我们如何纠正下一个建筑?问题是不正确的,因为我们传递了一个Function对象数组,但没有传递函数调用的结果。

funcArray = [ 
    function() { return $.ajax( "test.aspx" ) }, 
    function() { return $.ajax( "test2.aspx" ) }
]

if( cond )
{
    funcArray.push( function() { return $.ajax( "test3.aspx" ) } )
}

$.when.apply( null, funcArray ).then(...); // how to correct here and probably somewhere else?

1 个答案:

答案 0 :(得分:2)

Mattias Buelens已经在a comment中说过,问题是你将函数返回到$.when - 而不是实际的承诺。

您必须迭代数组并返回每个函数调用的结果。

有几种方法可以这样做:

  • [最稳定] 使用jQuery的$.map函数:

    $.when.apply(null, $.map(funcArray, function (val) {
        return val();
      })
    );
    
  • 使用Array.prototype.map()

    $.when.apply(null, funcArray.map(function (val) {
        return val();
      })
    );
    
  • Firefox≥22还允许使用arrow functions的所谓语法:

    $.when.apply(null, funcArray.map(fun => fun()));