我正在实现自己的缓存,因为我需要知道我的应用程序的语义。我正在实现访问REST服务的客户端API中的缓存。逻辑很简单:我首先查看我自己的对象字典,如果请求的对象不存在,那么我使用网络从REST服务请求对象。即使请求的对象位于我的缓存中,使用客户端API的代码也会期待承诺。我的问题是:为缓存中的对象实现promise/deferred模式的最佳方式是什么?现在我正在使用超时功能来做到这一点。超时功能是否足够好:?我有什么保证,超时功能将在API的用户收到承诺对象后执行?要看看我的问题的详细信息,请参见下面的代码:
简化代码,只显示什么是相关的问题:
angular.module("myApp").factory("restClient", function($q, $http, $timeout, cache){
var get_content=function(link){
var deferred=$q.defer();
$http.get(link)
.success(function (data) {
deferred.resolve(data);
deferred=null;
})
.error(function (error) {
deferred.reject(error);
deferred=null;
});
return deferred.promise;
};
return{
getObject : function(objectId) {
//If object is in the cache
if (cache.contains(objectId)){
var deferred=$q.defer();
$timeout(function(){
var objectContent=cache.get(objectId);
deferred.resolve(objectContent);
deferred=null;
});
return deferred.promise;
}
else{
//Create link
//return promise
return get_content(link);
}
}
});
你在哪里放入缓存? – PSL 2014-09-19 00:01:53
我也必须在客户端放入缓存,但是我忽略了该算法的细节。 – 2014-09-19 00:02:36
你已经留下评论,你收回了...? – PSL 2014-09-19 03:39:37