[AngularJS]$q.all 返回的所有值未定义

发布时间: 2017/4/16 21:12:57
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我要等上 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:

你不应该做 .promisepromise 对象返回的 get 方法,因为那时你已经回到 promise 窗体 get 方法。

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

当你正在做 a.promiseb.promise & c.promise 他们都成为 undefined & 然后 $q.all 数组成为 $q.all([undefined, undefined, undefined]) 传递给 $q.all 会给 undefined 的结果。

赞助商