【问题标题】:$q.all returns undefined for all values$q.all 为所有值返回 undefined
【发布时间】:2016-06-03 13:44:42
【问题描述】:

我正在尝试等待 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,任何人都可以阐明问题所在吗?

【问题讨论】:

    标签: javascript angularjs promise angular-promise


    【解决方案1】:

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

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

    当你在做 a.promise, b.promise & c.promise 他们都变成 undefined & 然后 $q.all 数组变为 $q.all([undefined, undefined, undefined]) 将它们传递给 $q.all 将得到 undefined 结果。

    【讨论】:

    • 这确实是问题所在(拔掉头发)-非常感谢!
    • @Aredhel 很高兴知道这一点.. 谢谢 :)
    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2018-01-02
    • 2014-04-04
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多