Angular等待服务函数Ajax完成

时间:2015-08-07 12:32:38

标签: javascript angularjs

我想从我的控制器获取$ http请求的结果。

这是我的服务:

.service('postService', function($http, apiUrl) {

    return {
        post: function(uri, params) {
            $http.post(apiUrl + uri, params).then(function(items) {                 
                    return items.data;
            });
        }
    };
})

这就是我在控制器中所做的事情:

var getData = postService.post('my_service_url', {id: 'test'});
getData.then(function(result) {
       $scope.data = result;
       console.log(data);
});

但我抓住了错误:

  

getData未定义

实现这一目标的方法是什么?

2 个答案:

答案 0 :(得分:3)

您需要返回 $http.post

return {
    post: function(uri, params) {
        return $http.post(apiUrl + uri, params);
    }
};

然后你可以挂上你的then

var getData = postService.post('my_service_url', {id: 'test'});
getData.then(function(result) {
       $scope.data = result;
       console.log(data);
});

答案 1 :(得分:0)

尝试使用angularjs的$ q模块:

https://docs.angularjs.org/api/ng/service/$q

您的服务代码可能如下所示:

.service('postService', function($http, $q, apiUrl) {

    return {
        post: function(uri, params) {
            var deferred = $q.defer();

            $http.post(apiUrl + uri, params).then(function(items) {                 
                    deferred.resolve(items.data);
            }, function() {
              // error case
                    deferred.reject();
            });

            return deferred.promise;
        }
    };
})