我正在尝试使用angular的http缓存,但结果是未定义的。 Cache返回一个对象,但usersCache未定义。
main.js中的控制器
angular.module('dsnApp')
.service('dataService', function($http, $cookies, $cacheFactory) {
this.explorePosts = function(){
var id = $cookies.get("userId");
$http.get('http://dstm.herokuapp.com/api/explore', {cache: true,
params: {userId: id, page: 1},
})
.then(function successCallback(response) {
console.log(response);
}, function errorCallback(response) {
console.log(response);
});
};
data.js中的服务
case run_command()
{:ok, data} -> something1
{:error, data} -> something2
# {:error, :timeout} -> something3
end
答案 0 :(得分:1)
@charlietfl是对的。
$ http是异步的。在请求之前不会缓存任何内容 完成,您尝试同步访问缓存。
为了使这项工作符合你的期望:
首先,让this.explorePosts
函数返回promise
,$http
服务alredy返回。
this.explorePosts = function(){
var id = $cookies.get("userId");
return $http.get('http://dstm.herokuapp.com/api/explore', {cache: true,
params: {userId: id, page: 1},
})
.then(function successCallback(response) {
console.log(response);
}, function errorCallback(response) {
console.log(response);
});
};
然后在promise的then
回调中使用缓存。
$scope.explore = function() {
dataService.explorePosts().then(function () {
var cache = $cacheFactory.get('$http');
console.log(cache);
var usersCache = cache.get('http://dstm.herokuapp.com/api/explore');
console.log(usersCache);
});
};