Извлечение значений из массива отложенных - PullRequest
2 голосов
/ 24 марта 2012

У меня есть массив отложенных объектов, которые я пытаюсь сопоставить с их разрешенными значениями после их завершения. Я хочу вернуть массив, когда все заканчивается разрешением.

Вот что у меня есть:

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

К сожалению, это возвращает массив отложенных объектов в разрешенном состоянии. Есть ли способ, которым я могу напрямую получить доступ к разрешенным элементам? Я знаю, что могу по отдельности связывать .then и .pipe с разрешенным массивом отложенных объектов, но для моих целей это не работает.

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Отложенные объекты не предназначены для возврата любых значений. Вы должны обработать результаты в обратных вызовах.

Результаты передаются в качестве аргументов для обратных вызовов 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);

DEMO

0 голосов
/ 24 марта 2012

Вот хакерское решение:

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;
  });
};

Кажется неловким делать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...