TypeError:无法读取未定义的属性'then'。承诺?

时间:2015-03-04 19:02:06

标签: angularjs angularjs-scope angularjs-service

我认为我在理解承诺如何运作方面遇到了一些问题。我知道$ http,$ q和$ resource都会返回承诺。但访问承诺返回的数据,现在这是个问题。

我一直收到一个对我来说没有意义的错误。

TypeError: Cannot read property 'then' of undefined.

服务

this.method = function(args){
  return $http.get(url)
    .success(function(data.somePropertyOfReturnedDataBecauseItsJSON){
      console.log('It got the data');
    });
}

控制器

$scope.getData = function(){
 service.method(args)
   .then(function(data){
     $someObject.someProperty = data;
   });
}

任何建议和解释都会很棒!

感谢。

2 个答案:

答案 0 :(得分:0)

" this.method"为我举起一面红旗。 什么"这"在这种情况下?

您的全方位服务应该是这样的:

myModule.factory('myService', function($http){
    var service = {};
    var url = 'www.foobar.com/servicepath';

    service.method = function(args){ // Where are you using these args?
      return $http.get(url)
        .success(function(data){
          console.log('It got the data');
        });
    };

    return service;
}

答案 1 :(得分:0)

你需要从服务中返回一个承诺,你可以链接承诺,然后像这样使用:

this.method = function(args){
  return $http.get(url)
    .success(function(data.somePropertyOfReturnedDataBecauseItsJSON){
      return some value // what you return here will be the results of then
    });
}


$scope.getData = function(){
 service.method(args)
   .then(function(data){
     data here is what you return from the promise
   });
}