javascript - $q.all 为所有值返回 undefined

标签 javascript angularjs promise angular-promise

我正在尝试等待 3 个 promise ,但 $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有了代码,任何人都可以阐明问题所在吗?

最佳答案

你不应该在 get 方法返回的 promise 对象上做 .promise,因为你已经返回了 promise 表单 get 方法。

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

When you're doing a.promise, b.promise & c.promise they all becomes undefined & then $q.all array become $q.all([undefined, undefined, undefined]) passing them to $q.all will give undefined result.

关于javascript - $q.all 为所有值返回 undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548446/

相关文章:

javascript - 自定义滚动条和 Chrome

javascript - 使用非标准属性

javascript - Angular 指令和 Controller 响应 ng-click 事件

angularjs - 如何在 Angular.js 中使用 promises 并在查询字符串中使用 $resource?

validation - 自定义异步 vue-validator 破坏验证组件

javascript - 如何使用来自 Web 服务的 JSON 数据填充 Angular 中的表?

angularjs - 如何在 Id_token 中包含首选用户名声明

javascript - AngularJS - 从 ng-repeat 获取当前对象

javascript - 返回 promise 数组的链接函数

javascript - 如何获取li标签内的属性值?