Tho*_*der 3 javascript promise angularjs angular-promise
我试图等待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(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;
}
Run Code Online (Sandbox Code Playgroud)
(在实际代码中get()使用$http而不是$timeout当然).这是一个带有代码的Plnkr,任何人都可以对这个问题有所了解吗?
你不应该.promise对方法promise返回的对象做什么get,因为你已经返回了promiseform get方法.
$q.all([a, b, c])
Run Code Online (Sandbox Code Playgroud)
当你正在做的
a.promise,b.promise和c.promise他们都成为undefined&然后$q.all阵列成为$q.all([undefined, undefined, undefined])传递他们$q.all会给undefined结果.