2

Deferred オブジェクトの配列があり、完了したら解決された値にマップしようとしています。すべての解決が完了したら、配列を返したいと思います。

これが私がこれまでに持っているものです:

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

残念ながら、これは解決された状態の Deferred オブジェクトの配列を返します。解決された要素に直接アクセスする方法はありますか? .thenDeferred オブジェクトの解決された配列を個別に連鎖できることはわかってい.pipeますが、これは私の目的にはうまく機能しません。

4

2 に答える 2

2

遅延オブジェクトは、値を返すようには設計されていません。コールバックで結果を処理する必要があります。

done結果は、failまたはpipeコールバックに引数として渡されます。

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

これがハッキーな解決策です:

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 に答える