控制器内部的变量未被解析为由promise解决的数据

时间:2014-01-23 15:57:20

标签: javascript angularjs

//在服务PService中

this.getPTypes = function(){
        var types = PTypesFactory.get({});
        return types.$promise.then(function(result)
        {
            console.log(result.groups);
            return result.groups;
        });
    }

//在控制器内

$scope.groups = PService.getPTypes();

控制台日志显示正确获取的REST数据,但是当我这样做时

console.log($scope.groups);

我得到了

Object {then: function, catch: function, finally: function}

是promise API而不是正确的已解析数据。

2 个答案:

答案 0 :(得分:1)

问题在于您尝试使用异步函数,就像它是同步函数一样。

then是一个返回承诺的方法。

当使用回调调用它时,只有当响应从服务器返回时才会立即调用回调。

您可以这样写:

<强>服务

this.getPTypes = function(callback){
  PTypesFactory.get({}).then(callback);
}

<强>控制器

PService.getPTypes(function(res){
  $scope.groups = res.data;
});

答案 1 :(得分:0)

Promise用于处理异步操作。传递给then方法的函数在某个不确定的时间点被调用。您无法将值从其中返回到执行中的其他某个点。

不要在服务中调用then,只需返回承诺:

this.getPTypes = function(){
    return PTypesFactory.get({}).$promise;
}

并在控制器中处理其分辨率:

$scope.groups = PService.getPTypes().then(function(result) {
    console.log(result.groups);
});