我有以下服务,我最终想要缓存。但是,我似乎无法弄清楚如何使用Angular中的$ http将服务中的变量设置为来自REST调用的响应数据。
routerApp.service('activityService', function($http) {
delete $http.defaults.headers.common['X-Requested-With'];
this.temp = null;
this.setTemp(x) {
this.temp = x;
}
this.getActivities = function(x) {
var promise = $http({
method: 'GET',
url: 'my url is here...'
}).then(function(response) {
//setTemp(response.data); //definitely wont work
return response.data;
});
//how to set temp to response.data???
setTemp(promise.data); //doesn't work -
};
});
我不太清楚JS(或者那个角度)。做这个的最好方式是什么?
答案 0 :(得分:1)
没有必要缓存角度服务,它保证是单身人士 如果您要缓存响应数据,则将在服务中创建一个缓存对象。
现在关于主要问题。在这段代码中,滥用承诺而不是角度服务。 Promise是异步的,这意味着提供给.then()
的回调将在请求完成后的某个时间执行。除.then
之外,还会返回另一个承诺,您应该从activityService.getActivities
方法返回。
this.getActivities = function(x) {
var promise = $http({
method: 'GET',
url: 'my url is here...'
}).then(function(response) {
setTemp(response.data); //meaning that setTemp somehow modifies it's argument
return response.data;
});
return promise;
};
然后在您的某个控制器中,您将使用此服务的方法将.then
附加到其返回值。
.controller('someController', function (activityService) {
activityService.getActivities()
.then(function (data) {
doSomethingWithResponse(data);
}
});