$ q.all为所有值返回undefined

时间:2016-02-22 07:57:24

标签: javascript angularjs promise angular-promise

我试图等待3个承诺,但$q.all似乎立即解决它们并为每个单独的值返回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代码,请问有人可以解释一下这个问题是什么吗?

1 个答案:

答案 0 :(得分:7)

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

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

当您执行a.promiseb.promise& c.promise他们都成了   undefined&然后$q.all数组变为$q.all([undefined, undefined, undefined]),将它们传递给$q.all会产生undefined结果。