【问题标题】:how to get array of values in done callback for $.when.apply($, promises)如何在 $.when.apply($, promises) 的完成回调中获取值数组
【发布时间】:2017-01-30 19:28:14
【问题描述】:

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

所以最后我需要做一些事情,当所有的承诺都得到解决并执行完函数。

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

}

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

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

谢谢

【问题讨论】:

  • then 回调将传入多个参数 - arguments[0...n] ... 为什么不使用Promise.all(promises).then(function(thisAcutallyIsAnArrayOfvalues){
  • 感谢@Jaromanda X。由于您是第一个正确回答问题的回复,请将其作为答案重新发布,以便我接受。谢谢。

标签: javascript jquery promise


【解决方案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 环境中或使用合适的 Promise polyfill,您可以使用 Promise.all(),它执行类似于 $.when() 的操作,但接受一个数组作为其初始参数并将结果放入一个数组中:

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

【讨论】:

    猜你喜欢
    • 2017-08-02
    • 2015-01-14
    • 2014-06-05
    • 1970-01-01
    • 2015-02-10
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多