$ q.all返回undefined所有值all、undefined

2023-09-13 05:15:23 作者:幸福对我说,你还太小。

我想等待3承诺,但 $ q.all 似乎一下子解决这些问题并返回未定义每个单个值,我想不通为什么:

  this.doWork =功能(){  变种推迟= $ q.defer();  VAR一个=得到('A'),    B = GET('B'),    C = GET('C');  $ q.all([a.promise,b.promise,c.promise])    。然后(功能(值){      deferred.resolve(新测试(值[0],值[1],值[2]));    },函数(原因){      deferred.reject(原因);    });  返回deferred.promise;};函数来获取(参数){  变种推迟= $ q.defer();  $超时(函数(){    如果属实) {      deferred.resolve({        值:参数      });    }其他{      deferred.reject({        消息:非常糟糕      });    }  },1000);  返回deferred.promise;} 

(在实际code 的get()使用 $ HTTP 而不是 $超时,当然)。这里有一个 Plnkr 与code,任何人可以请一些线索的问题是什么?

解决方案

您不应在承诺做 .promise GET 方法返回了,因为你已经返回的对象表格 GET 方法。

  $ q.all([A,B,C]) 
用户的资料界面对移动应用的影响

  

当你正在做的 a.promise b.promise &安培; c.promise 他们都变得  未定义&安培;那么 $ q.all 阵列成为 $ q.all([不确定,不确定的,不确定])将它们传递给 $ 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.