$q.all returns 未定义所有值
$q.all returns undefined for all values
我试图等待 3 个承诺,但 $q.all
似乎立即解决了它们并且 returns 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
,因为您已经从 get
方法返回了 promise
。
$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.
我试图等待 3 个承诺,但 $q.all
似乎立即解决了它们并且 returns 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
,因为您已经从 get
方法返回了 promise
。
$q.all([a, b, c])
When you're doing
a.promise
,b.promise
&c.promise
they all becomesundefined
& then$q.all
array become$q.all([undefined, undefined, undefined])
passing them to$q.all
will giveundefined
result.