Angular js服务从控制器调用时返回函数对象?

时间:2014-06-05 09:17:53

标签: angularjs angularjs-service

var newservices = angular.module('newservices', []);
newservices.service('newservice', function ($http) {
return{
newdata: function(parameter){
            return $http.get('/devicedetails/'+parameter).success(function(data)        {
                console.log(data)
                return data

            });

},
}
});

上述服务包含在我的一个控制器中

data=newService.newdata($scope.dummy)
console.log(data)

尝试打印数据时我得到的是$ http函数对象,如下所示

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

为什么会如此?

3 个答案:

答案 0 :(得分:5)

你看到的不是错误。这是一个承诺。 您执行了$http GET请求,这是异步的。 $http.get返回将在远程请求完成时解析的承诺。在那一刻,你将获得最终价值。

请参阅此示例,其中getShops将是您的方法newData

 this.getShop = function (id, lang) {
    var promise = $http.get(appRoot + 'model/shops_' + lang + '.json');
    return promise;
 };

在控制器中,您可以像这样使用它:

   Shops.getShop($routeParams.id).then(function (response) {
       console.log("data is", response.data);
       $scope.shop = response.data[$routeParams.id];
   });

数据准备就绪后,将其分配到范围。

在你的情况下:

var data;
newService.newdata($scope.dummy).then(function (response) {
   data = response.data;
});

答案 1 :(得分:2)

您的服务正在返回promise

你应该使用这样的东西,尽管它应该有用但没有经过测试。

data = newService.newdata($scope.dummy).then(function (response) {
                    return response.data;
                },       
                function (error) {
                        return error;
                 });

答案 2 :(得分:0)

你错了。

这项承诺的工作。所以在你的控制器中你需要消耗掉这些承诺。

newService.newData($scope.dummy)
  .then(function (data){
    $scope.data = data;
    console.log(data);
  });

试试这个。