为什么 $q.all(promises).then() 不等待承诺?
Why does $q.all(promises).then() not wait for the promise?
我必须使用 AngularJS 1.5.5.
我正在调用多个 Rest-Services 并且需要同时处理所有结果。
$scope.callWebservices = function(){
let promises = {
first: callFirstWebservice(),
second: callSecondWebservice()
}
$q.all(promises).then(function(results){
console.log(results.first);
console.log(results.second);
console.log(results.second.value);
});
}
function callFirstWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
});
}
function callSecondWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
});
}
如果我调用 callWebservices
,chrome 开发控制台会记录两个未解决的承诺,如下所示:m {$promise: d, $resolved: false}
第三个日志是 TypeError,因为 result.second
未定义。
当我展开 promise 的日志输出时,它会刷新状态并显示 $resolved: true
.
不应该 .then()
在执行之前等待所有承诺被解决吗?
我错过了什么吗?
编辑:更正了原始代码中不存在的拼写错误(结果!=结果)。
我发现了问题。
方法 callFirstWebservice 和 callSecondWebservice
似乎 return 一个 $resource 实例。
我必须将 .$promise
添加到 return 值,如 $resource:
的 angular 文档中所述
资源实例和集合具有以下附加属性:
$promise:创建此实例或集合的原始服务器交互的承诺。
将这些更改为
后
function callFirstWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
}).$promise;
}
function callSecondWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
}).$promise;
}
一切正常!
我必须使用 AngularJS 1.5.5.
我正在调用多个 Rest-Services 并且需要同时处理所有结果。
$scope.callWebservices = function(){
let promises = {
first: callFirstWebservice(),
second: callSecondWebservice()
}
$q.all(promises).then(function(results){
console.log(results.first);
console.log(results.second);
console.log(results.second.value);
});
}
function callFirstWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
});
}
function callSecondWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
});
}
如果我调用 callWebservices
,chrome 开发控制台会记录两个未解决的承诺,如下所示:m {$promise: d, $resolved: false}
第三个日志是 TypeError,因为 result.second
未定义。
当我展开 promise 的日志输出时,它会刷新状态并显示 $resolved: true
.
不应该 .then()
在执行之前等待所有承诺被解决吗?
我错过了什么吗?
编辑:更正了原始代码中不存在的拼写错误(结果!=结果)。
我发现了问题。
方法 callFirstWebservice 和 callSecondWebservice
似乎 return 一个 $resource 实例。
我必须将 .$promise
添加到 return 值,如 $resource:
资源实例和集合具有以下附加属性: $promise:创建此实例或集合的原始服务器交互的承诺。
将这些更改为
后function callFirstWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
}).$promise;
}
function callSecondWebservice(){
return myService.get({
myParameter : $scope.myId
}, function(res){
}, function(err){
console.log(err);
}).$promise;
}
一切正常!