Javascript 服务中的返回响应

Javascript 服务中的返回响应,javascript,angularjs,Javascript,Angularjs,我正试图将我的逻辑从控制器转移到服务,因为我对AngularJS还是新手 我试图从一个内部API获取一些数据并将其返回到控制器的作用域,尽管我这样做的方式是返回一个空对象 这是我的控制器 cbApp.controller('serversCtrl', function($scope, serversService){ $scope.servers = serversService.getServers(); console.log($scope.servers); // retu

我正试图将我的逻辑从控制器转移到服务,因为我对AngularJS还是新手

我试图从一个内部API获取一些数据并将其返回到控制器的作用域,尽管我这样做的方式是返回一个空对象

这是我的控制器

cbApp.controller('serversCtrl', function($scope, serversService){
    $scope.servers = serversService.getServers();
    console.log($scope.servers); // returns Object {}
});
这是我的服务,我可能做错了

cbApp.service('serversService', function($http){
    var servers = {}
    this.getServers = function(){
        $http.get(BASE_URL + '/api/s').success(function(response){
            servers = response.servers;
        });
        return servers;
    }
});
似乎
servers=response。在get函数之后,服务器未连接


我做错了什么?

console.log($scope.servers)时,您的承诺还没有完成运行

您仍然应该在控制器中处理承诺(直到您开始使用路由器的
解析
,但每次只执行一步)

以下是更改代码的方法:

cbApp.controller('serversCtrl', function($scope, serversService){
  serversService.getServers().success(function(servers) {
    $scope.servers = servers;  
   });
});

cbApp.service('serversService', function($http){
    this.getServers = function(){
        return $http.get(BASE_URL + '/api/s');
    }
});

如果你是AngularJS的新手-你可能是承诺的新手。下面的答案是正确的,但你应该先通读一遍。