Javascript $q.all返回所有值的未定义值

Javascript $q.all返回所有值的未定义值,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我正在尝试等待3个承诺,但$q.all似乎会立即解决它们,并为每个值返回未定义的,我不明白为什么: 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.

我正在尝试等待3个承诺,但
$q.all
似乎会立即解决它们,并为每个值返回
未定义的
,我不明白为什么:

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
)。下面是一个关于代码的例子,有人能解释一下问题是什么吗?

您不应该在
方法返回的
get
对象上执行
promise
操作,因为您已经返回了
promise
表单
get
方法

$q.all([a, b, c])
当你做的时候,
a.promise
b.promise
&
c.promise
它们都变成了
undefined
&然后
$q.all
数组变成
$q.all([undefined,undefined,undefined])
将它们传递给
$q.all
将给出
undefined
结果


这确实是问题所在(拔出头发)-非常感谢@阿雷德尔很高兴知道这一点。。谢谢:)