0

我可以像这样将多个 ajax 调用传递给一个 when:

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 请求数组中获取第一个doneCb。我知道我可以向 done 函数添加更多参数以获取其他回调,但这不可扩展。(我将在我的 ajax 调用中进行未知数量的调用when,因此我无法提前知道在 done 函数中需要多少参数)。

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

4

1 回答 1

3

jQuery.when() 文档中的第一个示例展示了如何访问各个 Promise 的参数。

然而,它没有解决如何处理未知数量的 Promise,为此几乎不需要额外的知识 - 即函数的参数在类似数组的 object 中可用arguments,可以按如下方式循环。

$.when.apply($, dnldAy).done( function() {
    for(i=0; i<arguments.length; i++) {
        var doneCb = arguments[i];
        console.log( doneCb );
    }
}

每个doneCb本身都是一个数组,其中包含解决相应承诺的值。

于 2013-05-10T03:41:57.763 回答