我想等待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 undefined
for 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.