如何在$ .when.apply($,promises)的完成回调中获取值数组

时间:2016-09-22 09:32:25

标签: javascript jquery promise

我有一系列承诺: var promises = []; 其中每个promises resolve函数都传递一个值: deferredObj.resolve(someValue中);

所以最后我需要做一些事情,当所有的Promise都被解决并且执行了done函数。

AJS。$。when.apply(AJS。$,promises).done(function(arrayOfValues){

}

问题是我无法得到上面解决的值,因为它没有被填满(它只有从第一个解析中获得的值)。

如何在上面的done函数中获得可变数量的值?

由于

1 个答案:

答案 0 :(得分:1)

jQuery将结果作为单独的参数传递。如果你有一个已知数量的参数,或者你没有在数组中特别需要它们,你可以这样使用它们:

$.when.apply($, promises).done(function(r1, r2, r3, r4, r5) {
    // process various results here
});

如果你想在数组中获取参数,你有几个选项。

$.when.apply($, promises).done(function() {
    var args = Array.prototype.slice.call(arguments);
    // now all the arguments are in the args array
});

或者,在适当的ES6环境中,您可以使用扩展运算符:

$.when.apply($, promises).done(function(...args) {
    // now all the arguments are in the args array
});

或者,在ES6承诺环境中或使用合适的Promise polyfill,您可以使用Promise.all()执行与$.when()类似的操作,但接受数组作为其初始参数并将结果放入一个数组:

Promise.all(promises).done(function(arrayOfResults) {
    // process various results here
});