我有一系列承诺: var promises = []; 其中每个promises resolve函数都传递一个值: deferredObj.resolve(someValue中);
所以最后我需要做一些事情,当所有的Promise都被解决并且执行了done函数。
AJS。$。when.apply(AJS。$,promises).done(function(arrayOfValues){
}
问题是我无法得到上面解决的值,因为它没有被填满(它只有从第一个解析中获得的值)。
如何在上面的done函数中获得可变数量的值?
由于
答案 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
});