2

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

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

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

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

4

2 回答 2

2

延迟对象并非旨在返回任何值。您必须在回调中处理结果。

结果作为参数传递给done,failpipe回调:

$.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);

演示

于 2012-03-23T21:05:34.920 回答
-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;
  });
};

不得不这样做似乎有点尴尬。

于 2012-03-23T20:55:50.740 回答