Javascript $q.all返回所有值的未定义值
我正在尝试等待3个承诺,但Javascript $q.all返回所有值的未定义值,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我正在尝试等待3个承诺,但$q.all似乎会立即解决它们,并为每个值返回未定义的,我不明白为什么: 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.
$q.all
似乎会立即解决它们,并为每个值返回未定义的
,我不明白为什么:
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
)。下面是一个关于代码的例子,有人能解释一下问题是什么吗?您不应该在方法返回的get
对象上执行promise
操作,因为您已经返回了promise
表单get
方法
$q.all([a, b, c])
当你做的时候,a.promise
,b.promise
&c.promise
它们都变成了
undefined
&然后$q.all
数组变成$q.all([undefined,undefined,undefined])
将它们传递给$q.all
将给出undefined
结果
这确实是问题所在(拔出头发)-非常感谢@阿雷德尔很高兴知道这一点。。谢谢:)