$ q.all为所有值返回undefined

Tho*_*der 3 javascript promise angularjs 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Pan*_*kar 7

你不应该.promise对方法promise返回的对象做什么get,因为你已经返回了promiseform get方法.

$q.all([a, b, c])
Run Code Online (Sandbox Code Playgroud)

当你正在做的a.promise,b.promisec.promise他们都成为 undefined&然后$q.all阵列成为$q.all([undefined, undefined, undefined])传递他们$q.all会给undefined结果.