$q.all 为所有值返回 undefined [英] $q.all returns undefined for all values

查看:35
本文介绍了$q.all 为所有值返回 undefined的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试等待 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(函数(值){deferred.resolve(new Test(values[0], values[1], values[2]));}, 函数(原因){deferred.reject(reason);});返回 deferred.promise;};函数获取(参数){var deferred = $q.defer();$超时(功能(){如果是真的) {deferred.resolve({值:参数});} 别的 {延迟.拒绝({消息:真的很糟糕"});}}, 1000);返回 deferred.promise;}

(在实际代码中 get() 使用 $http 而不是 $timeout,当然).这是带有代码的 Plnkr,有人可以说明问题所在吗?

解决方案

你不应该对 getpromise 对象执行 .promise> 方法,因为你已经返回了 promise 形式的 get 方法.

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

<块引用>

当你在做 a.promise 时,b.promise &c.promise 他们都变成未定义 &然后 $q.all 数组变成 $q.all([undefined, undefined, undefined]) 将它们传递给 $q.all 将给出未定义结果.

I'm trying to wait on 3 promises but $q.all appears to resolve them at once and returns undefinedfor each single value, I can't figure out why:

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;
}

(in the actual code get() uses $http instead of $timeout, of course). Here's a Plnkr with the code, can anybody please shed some light on what the issue is?

解决方案

You should not be doing .promise on promise object returned by get method, because you had already returned promise form get method.

$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.

这篇关于$q.all 为所有值返回 undefined的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆