Angular $ http缓存无法正常工作

时间:2017-01-02 03:33:54

标签: javascript angularjs

我正在尝试使用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

1 个答案:

答案 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);
    });
};