//在服务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而不是正确的已解析数据。
答案 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);
});