Angularjs 我设置了服务数据,但在$http完成后,我无法获取服务数据
我的服务定义如下:Angularjs 我设置了服务数据,但在$http完成后,我无法获取服务数据,angularjs,Angularjs,我的服务定义如下: module.factory('portfolio',function(){ var data; var selectedPort; return{ getData: function(){ return data; }, setData:function(portfolios){ data = portfolios; }, getSelectedPort:function(){ retu
module.factory('portfolio',function(){
var data;
var selectedPort;
return{
getData: function(){
return data;
},
setData:function(portfolios){
data = portfolios;
},
getSelectedPort:function(){
return selectedPort;
},
setSelectedPort:function(portfolioDetail){
selectedPort = portfolioDetail;
}
}
});
在我的控制器中,代码如下所示:
module.controller('portfoliosController', function($scope,$http, alertService,stockService, userDataService, portfolio){
var req = {
method: 'get',
url: 'www.facebook.com',
headers: {
'Authorization': userDataService.getToken()
}
};
$http(req).then(function(reponse){
$scope.portfoliosPriceList = reponse['data'];
portfolio.setData($scope.portfoliosPriceList);
console.log(portfolio.getData())//At here,I can get the portfolio's data
}, function(){
alertService.setMessge("System maintenance , please try again later");
alertService.alert();
});
console.log(portfolio.getData())//At here, I cannot get the portfolio's data
});
错误是
Error: undefined is not an object (evaluating 'message.substr')
有人能帮我解决这个问题吗?事实上,我真的不明白,为什么我不能在$http之外获取数据这是因为javascript是异步的,所以代码:
portfolio.getData()
可能在从服务返回数据之前执行
在这种情况下,您应该仅在请求完成后(在$http的.then()函数中)使用公文包的数据,或者做出承诺
以下是有关角度承诺的文档:
$q您对
$http
服务执行的请求是异步完成的,因此不会立即调用传递给.send
的回调
紧接着的代码(console.log)是在发出$http(req)
调用之后,但在响应请求时调用回调之前执行的
也许你会通过一个简单的例子更好地理解:
函数portfolioController(){
变量数据='初始数据',
content=document.getElementById('content');
//setTimeout将是您的$http.send(req)
//calledLater将是您的.then(函数(){…})
setTimeout(函数calledLater(){
数据='来自服务器的数据需要一段时间才能到达…';
content.innerHTML=content.innerHTML+数据;
}, 1000);
content.innerHTML=content.innerHTML+数据;
}
PortfolioController()代码>
这是因为调用console.log()时$http调用尚未完成。您想对数据做什么??