方法发布时$ http服务缓存

sis*_*imh 7 angularjs angular-http

当我将$ http设置为缓存请求时,我仍然看到从浏览器网络发送到服务器的重复请求(具有相同的URL和相同的数据),

$http.post(url, data, {cache:true} ).success(function(response) {
Run Code Online (Sandbox Code Playgroud)

我有以下问题:

  • 这是正确的行为吗?
  • 我们可以缓存帖子请求吗?
  • 这是正确的方法,还是应该使用$ cachefactory手动完成?

Amy*_*eum 8

来自文档:

仅缓存GET和JSONP请求.

如果要缓存POST请求,则必须手动执行.您需要创建一个缓存响应的服务/工厂,并在$ http之前充当图层.您可以使用$cacheFactory或仅使用普通对象.

function cacheService($http, $q){      
  var cache = {};      
  this.callSomething = function(postData){
    let deferred = $q.defer();
    let hash = angular.toJson(postData);
    if(cache[hash]){
      deferred.resolve(cache[hash]);
    } else {
      $http.post('path/to/resource', postData).then(function(response){
        cache[hash] = response;
        deferred.resolve(response);
      });
    }        
    return deferred.promise;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子,你当然可以使用相同的原理并制作一个更通用的服务,它接受一个URL,postData和一个缓存对象,并返回一个执行请求并缓存它的函数.