2016-08-25 351 views
-1

我试着下面的代码服务功能未定义

在我services.js的服务之一是

.service('AppService', ['$http', 'AuthService', function ($http, AuthService) { 

    var getUserData = function(){ 
    return { 
    "fname": "Admin", 
    "lname": "ladmin", 
    "array" : [{}, {}] 
    } 
} 
return { 
    getUserData: getUserData 
} 
}]); 

在我的控制,我有

AppService.getUserData().then(function(response){ 
    console.log(response); 
}, function(err){ 
    console.log(err); 
}) 

错误:AppService.getUserData(...).then is not a function

我已注入服务。我究竟做错了什么 ?

+0

只需删除此语句'this.getUserData = function(){' – itzmukeshy7

+0

你entertai n'then'你需要'返回Promise'看到更多这里[Promise](https://docs.angularjs.org/api/ng/service/$q) – itzmukeshy7

回答

3

您正在连接呼叫AppService.getUserData().then(function(response){中的then函数,这意味着您的服务应返回promise(但那不是您的情况)。

为了使您的工作代码,删除然后函数:

var data = AppService.getUserData(); //no promise used, your actual situation. 

,如果你想使用一个承诺,留下您的控制器功能,因为它是和修改你的服务,像这样:

.service('AppService', ['$http', 'AuthService', '$q', function ($http, AuthService, $q) { 

    getUserData : function(){ 
     return $q(function(resolve, reject) { 
      resolve({ 
       "fname": "Admin", 
       "lname": "ladmin", 
       "array" : [{}, {}] 
      }); 
     } 
    }  
}]); 

这种方式,你会使用一个承诺(但在你的例子中,你不需要它,这是一个简单的回电呼叫)

+0

我正在调整通过$ q注射更早,只是做一些奇怪的$ q.resolve的东西,使事情发生。非常感谢 ! – kushalvm

+0

我打算在路由器的解决方案中使用服务承诺。我怎样才能做到这一点。我尝试着像'AppService.getUserdata()。then(function(response){return response})'那样做,但是没用。 – kushalvm

+0

尝试在新问题中分享您的代码,以便我们更好地了解您的问题(它是免费的!:)) – Luxor001