多个jQuery谁的dones?

时间:2013-05-10 03:20:00

标签: jquery jquery-deferred

我可以将多个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调用,所以我不知道提前完成函数需要多少参数。

处理这个设计问题的正确方法是什么?

1 个答案:

答案 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本身就是一个数组,其中包含用于解析相应承诺的值。