我可以将多个ajax调用传递给像这样的时间:
var dnldAy = [];
for (i=0, iMax=urlsToLoad.length; i < iMax; i++) {
dnldAy.push( $.ajax({
url: urlsToLoad[i],
dataType: "json"
}) );
}
$.when.apply($, dnldAy).done( function( doneCb ) {
console.log( doneCb );
}
当when
运行时,它只从ajax请求数组中获取 first doneCb。我知道我可以在done函数中添加更多参数来获取其他回调,但这不是可扩展的。 (我将when
中有一个未知数量的ajax调用,所以我不知道提前完成函数需要多少参数。
处理这个设计问题的正确方法是什么?
答案 0 :(得分:3)
the documentation for jQuery.when()中的第一个示例显示了如何访问各个promise的参数。
然而,它没有解决如何处理未知数量的promise,因为这些知识很少需要额外的知识 - 即函数的参数在类似于数组的对象arguments
中可用,它可以循环通过如下。
$.when.apply($, dnldAy).done( function() {
for(i=0; i<arguments.length; i++) {
var doneCb = arguments[i];
console.log( doneCb );
}
}
每个doneCb
本身就是一个数组,其中包含用于解析相应承诺的值。