在返回结果之前解析$ http Get

时间:2017-05-23 15:29:08

标签: angularjs http promise

我想在返回之前解决$ http get请求,但我似乎总是得到未定义的结果。 我花了很多时间研究和尝试不同的方法,似乎仍然无法解决它,你们中的任何人都能看到我出错的地方吗?

这是services.js文件

(function() {


angular.module('Home')
    .factory('HomeService', HomeService);

function HomeService($http) {
    return {
        getStatus: getStatus()
    };

        function getStatus($scope) {
            $http({
                method: 'GET',
                url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
        }).then(function successCallback(response) {        


        }, function errorCallback(response) {

        });
        }
    }
}());   

这是我希望发送解析结果的控制器。

function HomeController(HomeService) {      
    HomeService.getStatus;
    console.log(HomeService.getStatus)
    };  

3 个答案:

答案 0 :(得分:0)

这是学习使用承诺。这是获得您想要的快速方法。我会查看promises和$ q函数,你也可以实现但我在这里不详细说明。 Angular docs on $q 基本上,您从服务返回承诺并实现代码,以便在承诺在控制器内返回时运行。



(function() {

angular.module('Home')
    .factory('HomeService', HomeService);

function HomeService($http) {
    return {
        getStatus: getStatus
    };

        function getStatus($scope) {
            return $http({
                method: 'GET',
                url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
        }); 
        }
    }
    
    // Your controller should use the service like this
    function HomeController(HomeService) {      
    HomeService.getStatus().then(function(response){
      console.log(response.data);
    
    },function(response){
      console.log('an error occured');
    });
     
    
}());




答案 1 :(得分:0)

您可以在服务中退回承诺,以便在您的控制器中解决:

<强>服务

function getStatus() {
    var promise = $http({
         method: 'GET',
         url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
    });
    promise.then(function(data) {
        return data.data;
    });
};

<强>控制器:

 HomeService.getStatus().then(function(status) {
     $scope.status = status;
 });

答案 2 :(得分:0)

试试这个:

(function() {


angular.module('Home').service('HomeService', HomeService);

 function HomeService($http) {
    this.getStatus = function() {
        return $http({
            method: 'GET',
            url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
         }).then(function successCallback(response) {        
          }, function errorCallback(response) {
         });
    }
}

}());

并在您的控制器中:

angular.module('yourApp')
  .controller('yourController', ['HomeService',
      function(HomeService){
          function getStatusFromSrv(){
             var status;
             HomeService.getStatus().then(function(response){
               status = response;
               console.log("status:" , status);
             });
          }
      }
])