Javascript 如何访问$http.get调用者变量

Javascript 如何访问$http.get调用者变量,javascript,angularjs,scope,angular-promise,Javascript,Angularjs,Scope,Angular Promise,考虑以下简单的angularjs代码: $http.get( url ).then(function ( response ) { var cache = new Cache(url); cache.response = response; }); 我的问题是上面的代码是不确定的。从服务器获取响应时,url有时不匹配 我想同时编辑10个联系人数据。 为此,我希望将请求缓存到服务器,并将其放入javascript对象中 我已经编写了一个简单的服务来实现这一点,但存在上述缺陷 代码

考虑以下简单的angularjs代码:

$http.get( url ).then(function ( response ) {
    var cache = new Cache(url);
    cache.response = response;
});
我的问题是上面的代码是不确定的。从服务器获取响应时,url有时不匹配

我想同时编辑10个联系人数据。 为此,我希望将请求缓存到服务器,并将其放入javascript对象中

我已经编写了一个简单的服务来实现这一点,但存在上述缺陷

代码如下:

angular.module('myApp')
  .factory('save', function($http, $q) {

    // Private object
    var Cache = function(url) {
      this._url = url;
      this.response = {};
      this.saveDeferred = null;
      this.saveDeferredFulfilled = false;
    };

    Cache.prototype.$save = function () {
      return $http.put( this._url ).then(function (response) {
        this.response = response;
        return response;
      });
    };

    //public method
    var draft = {
      caches: {},
      get: function ( url ) {
        if (draft.caches.hasOwnProperty(url)) {
          return draft.caches.url.response;
        } else {
          return $http.get( url ).then(function ( response ) {
            var cache = new Cache(url);
            cache.response = response;
            return cache;
          });
        }
      },
      save: function(url) {
        if (draft.caches.url.saveDeferred) {
          if (!draft.caches.url.saveDeferredFulfilled) {
            draft.caches.url.saveDeferred.reject(new Error('forced timeout'));
          }
          draft.caches.url.saveDeferred = null;
          draft.caches.url.saveDeferredFulfilled = false;
        }

        draft.caches.url.saveDeferred = $q.defer();
        draft.caches.url.response.version = (parseInt(draft.caches.url.response.version) + 1).toString();

        $http.put(url, draft.caches.url.response)
          .success(function(data) {
            console.log('some data returned');
            console.log(data);
            draft.caches.url.saveDeferredFulfilled = true;
            draft.saveDeferred.resolve(data);
          })
          .error(function(error) {
            console.log('Some error occured in save.creates');
            console.log(error);
            draft.saveDeferred.reject(error);
          });
        return draft.saveDeferred.promise;
      }
    };

    return draft;
  });

这一定是一些非常基本的东西,我在这里缺少的东西。

也许可以看看这篇文章。我建议在您的情况下不要使用URL作为缓存键。为实体使用唯一键并基于这些键而不是易变的url字符串缓存它们可能是一种更干净的方法。我的问题是,我不理解承诺中的变量范围,因此我非常希望看到原始问题得到回答。不过,感谢mic4ael让我了解内置缓存服务,也感谢Constantine提供有关缓存密钥的提示。