我想使用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?
答案 0 :(得分:2)
Mattias Buelens已经在a comment中说过,问题是你将函数返回到$.when
- 而不是实际的承诺。
您必须迭代数组并返回每个函数调用的结果。
有几种方法可以这样做:
[最稳定] 使用jQuery的$.map函数:
$.when.apply(null, $.map(funcArray, function (val) {
return val();
})
);
$.when.apply(null, funcArray.map(function (val) {
return val();
})
);
Firefox≥22还允许使用arrow functions的所谓语法:
$.when.apply(null, funcArray.map(fun => fun()));