我尝试在服务中请求一些数据。我想确保数据保存在服务的变量中,因为由于状态的变化,我的控制器将一直重新加载,我只需要在网站加载时使用ONCE数据。
app.service('resultDeals',['$translate','$cookies','$http',
function($translate,$cookies,$http) {
var currentOrigin = {};
var originsUser={};
return {
loadOrigins:function() {
$http.get('app/deals/deal.json').success(function(response){
console.log(response);
originsUser = response.data;
return originsUser
}).error(function(err){
console.log(err);
});
},
userOrigin:originsUser
};
}]);
我的控制器如下所示
console.log(resultDeals.loadOrigins());
$scope.updateOrigins=resultDeals.loadOrigins();
问题是resultDeals.loadOrigins()
始终未定义。
我想确保将从loadOrigins()获取的数据存储在服务变量中,并且只在需要时才从控制器访问它,以便在控制器重新加载数据时不再需要获取数据。
我该怎么做?
答案 0 :(得分:2)
使用异步代码时,必须处理promises。 <{1}}必须返回一个承诺,您的控制器必须使用它。
loadOrigins
答案 1 :(得分:2)
不要使用.success
&amp; .error
回调函数,因为它们无法返回任何内容,因此无法继续使用promise链。而是在.then
方法(返回promise对象)上使用$http.get
。这将具有return data
的能力,而承诺是resolved
或reject
承诺。您可以从控制器方法继续promise
链。
<强>服务强>
return {
loadOrigins: function() {
return $http.get('app/deals/deal.json')
.then(function(response) {
console.log(response);
originsUser = response.data;
return originsUser
}, function(err) {
console.log(err);
});
},
userOrigin: originsUser
};
<强>控制器强>
resultDeals.loadOrigins().then(function(user){
$scope.updateOrigins= user;
}, function(){
console.log("Errror occurred.")
})