我正在尝试在 Angular 中编写一个将数据缓存到 localStorage 的服务,但没有取得多大成功!我需要你的帮助。我有几个不经常更改的“查找”数据类型,例如经纪人代码和航空公司代码。
我记得在我的一本(很多!)技术书籍中读到,可以围绕任何数据类型包装承诺,并且我在编写我的服务时采用了这种方法。本质上,如果它存在,我想从 localStorage 返回值,然后立即返回一个已解决的承诺。或者,在它不存在的情况下,我想 $http.get() 它并返回此调用返回的承诺。
我的伪代码如下所示:
angular.module('myApp')
.service("lookupDataService", function() {
this.brokers = function() {
var cachedBrokers = localStorage.getItem("brokers");
if (!cachedBrokers) {
$http.get('/api/brokers')
.success(function(data) {
localStorage.setItem("brokers", data);
// return promise
});
} else {
var deferred = $q.defer();
deferred.resolve();
// shoehorn the data from localStorage
return deferred;
}
}
})
这种方法合理吗?如何将承诺和数据返回给调用行为?
编辑
我意识到我没有正确地进行依赖注入。我已将伪代码修改为如下所示:
angular.module('myApp')
.service("lookupDataService", ['$q','$http', function($q, $http) {
this.brokers = function() {
var cachedBrokers = localStorage.getItem("brokers");
if (!cachedBrokers) {
return $http.get('/api/brokers')
.success(function(data) {
localStorage.setItem("brokers", data);
}
);
} else {
return $q.when(cachedBrokers);
}
}}]
)
我突然想到,在解决内部承诺之前,我的方法没有返回承诺。我认为。令人头疼的时刻。
米