为什么 $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;
}

一切正常!