如何获取所有承诺的返回值?

时间:2012-12-25 18:29:04

标签: jquery ajax

This article显示了wait如何完成动态数量的ajax请求。他做了以下事情:

var deferredArr = $.map($(".dynaload"), function(el, i) { 
    return $.ajax({ 
        url: $(el).data("loadUrl"), 
        success: function(html) { 
            $(el).html(html); 
        } 
    }); 
}); 
$.when.apply(this, deferredArr).then(function() { 
    alert("All Done Loading!"); 
});

问题是解析延迟的函数需要与延迟一样多的参数。所以,如果我这样做:

$.when.apply(this, deferredArr).then(function(data) { 
    alert("All Done Loading!"); 
});

然后data只是第一个承诺的结果。如何在不依赖于将结果附加到数组中的情况下获得所有结果?

1 个答案:

答案 0 :(得分:3)

参数数量未知的函数可以使用特殊的arguments数组:

$.when.apply(this, deferredArr).then(function() { 
    for (var i = 0; i < arguments.length; i++) {
        console.log("Promise "+i+" returned: "+arguments[i]);
    }
    alert("All Done Loading!"); 
});

有关文档和参数使用的更多示例,请参阅MDN documentation