2016-08-25 350 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