从Deferred数组中提取值

时间:2012-03-23 20:19:21

标签: jquery arrays deferred

我有一个Deferred对象数组,我试图在完成后将其映射到已解析的值。我想在一切都完成解析后返回数组。

这是我到目前为止所拥有的:

$.when.apply(null, deferredArray)
.pipe(function(){
  return deferredArray;
});

不幸的是,这会返回处于已解析状态的Deferred对象数组。 有什么方法可以直接访问已解析的元素吗?我知道我可以单独在已解析的Deferred对象数组上链接.then.pipe,但这不适用于我的目的。

2 个答案:

答案 0 :(得分:2)

延迟对象的设计不是返回任何值。你必须在回调中处理结果。

结果作为参数传递给donefailpipe回调:

$.when.apply(null, deferredArray).then(function(){
  // arguments[0] is the result of the first deferred object
  // arguments[1] is the result of the second deferred object
  // ...

  // or simple pass it to a function that needs the results:
  someFunction(arguments);
});

您也可以将该功能设置为回调:

$.when.apply(null, deferredArray).then(someFunction);

DEMO

答案 1 :(得分:-1)

这是一个hacky解决方案:

extractDeferredArray = function(array) {
  var deferred, extract, ret;
  ret = [];

  extract = (function() {
    var _i, _len, _results;
    _results = [];
    for (_i = 0, _len = array.length; _i < _len; _i++) {
      deferred = array[_i];
      _results.push(deferred.then(function(value) {
        return ret.push(value);
      }));
    }
    return _results;
  })();

  // Make sure our .then methods have completed
  return $.when.apply(null, extract).pipe(function() {
    return ret;
  });
};

看起来有点尴尬。