Javascript 如何访问$http.get调用者变量
考虑以下简单的angularjs代码: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对象中 我已经编写了一个简单的服务来实现这一点,但存在上述缺陷 代码
$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提供有关缓存密钥的提示。