$q.all returns 未定义所有值

$q.all returns undefined for all values

我试图等待 3 个承诺,但 $q.all 似乎立即解决了它们并且 returns undefined 对于每个单一值,我无法弄清楚原因:

this.doWork = function() {
  var deferred = $q.defer();
  var a = get('a'),
    b = get('b'),
    c = get('c');
  $q.all([a.promise, b.promise, c.promise])
    .then(function(values) {
      deferred.resolve(new Test(values[0], values[1], values[2]));
    }, function(reason) {
      deferred.reject(reason);
    });
  return deferred.promise;
};

function get(param) {
  var deferred = $q.defer();
  $timeout(function() {
    if (true) {
      deferred.resolve({
        value: param
      });
    } else {
      deferred.reject({
        message: "Really bad"
      });
    }
  }, 1000);
  return deferred.promise;
}

(在实际代码中 get() 使用 $http 而不是 $timeout,当然)。这是带有代码的 Plnkr,任何人都可以阐明问题所在吗?

您不应该对 get 方法返回的 promise 对象执行 .promise,因为您已经从 get 方法返回了 promise

$q.all([a, b, c])

When you're doing a.promise, b.promise & c.promise they all becomes undefined & then $q.all array become $q.all([undefined, undefined, undefined]) passing them to $q.all will give undefined result.